#jquery #jquery-plugins #jquery-validate
#jquery #jquery-плагины #jquery-проверка
Вопрос:
Я пишу систему, использующую проверку jQuery, которая использует пользовательские правила, сообщения через jSON и динамически проверяет несколько форм на отдельных страницах. Все идет гладко, за исключением того, что я не могу найти никакой достойной информации о правильном синтаксисе для пользовательских правил….
Например:
Я знаю, что это работает….
"ui_txt_GCPostcode": {
"required": "input[name=ui_rb_ItemAddress][value=Recipient]:checked"
}
Я говорю здесь, что ui_txt_GCPostcode
это требуется только тогда, когда проверяется переключатель из списка с именем ui_rb_ItemAddress
и значением Recipient
.
Мне кажется, что я могу назначать правила на основе выражений зависимостей, содержащих определенные атрибуты селектора.
Однако это не работает…..
"ui_sel_PCSelect": {
"required": "input[name=ui_txt_PostCodeSearch]:hidden, input[name=ui_txt_Address]:hidden"
}
Валидатор запускается, даже если у меня есть ui_txt_Address
видимый.
Я даже настраиваю средство проверки с помощью свойства игнорировать скрытое, например.
// Validate the form once the defaults are set.
$validator = $form.validate({
// This prevents validation from running on every
// form submission by default.
onsubmit: false,
messages: messages,
rules: rules,
errorContainer: $container,
errorLabelContainer: $("ol", $container),
wrapper: "li",
// Ignore hidden items. Why is this not working??
ignore: ":hidden"
});
Есть идеи?? У меня довольно сжатые сроки, и я начинаю паниковать.
Комментарии:
1.Вы хотите
ui_sel_PCSelect
бытьrequired
, когдаinput[name=ui_txt_PostCodeSearch]
иinput[name=ui_txt_Address]
скрыты?2. @Andrew: Да… Именно так. Мне только что удалось обойти это, но я хотел бы иметь чистое надежное решение.
Ответ №1:
Этот селектор:
"input[name=ui_txt_PostCodeSearch]:hidden, input[name=ui_txt_Address]:hidden"
Запускает required
правило, если первая или вторая часть верны (см. Множественный селектор). Вот почему правило срабатывает, даже если оно видно.
Если вы хотите сделать элемент обязательным, если оба скрыты, возможно, вам придется указать функцию зависимости вместо выражения:
"ui_txt_GCPostcode": {
"required": function() {
return $("input[name='ui_rb_ItemAddress'][value='Recipient']:checked").length amp;amp;
$("input[name='ui_rb_ItemAddress'][value='Recipient']:checked").length;
}
}
Что касается ignore
того, что свойство не работает, это для игнорирования полей, соответствующих селектору (so :hidden
скажет валидатору не проверять скрытые поля). Не уверен, использовали ли вы его таким образом.