проверка jquery. пользовательские правила с использованием синтаксиса селектора

#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 скажет валидатору не проверять скрытые поля). Не уверен, использовали ли вы его таким образом.