Проверка JQuery. пользовательские правила с использованием синтаксиса селектора - PullRequest
1 голос
/ 26 октября 2011

Я пишу систему, использующую jQuery Validation, которая использует пользовательские правила, сообщения через 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 видимым.

Я даже настраиваю валидатор со скрытым свойством ignore , например.

                // 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 Ответ

1 голос
/ 27 октября 2011

Этот селектор:

"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 &&
            $("input[name='ui_rb_ItemAddress'][value='Recipient']:checked").length;
    }
}

Что касается свойства ignore, которое не работает, то это для игнорирования полей, соответствующих селектору (поэтому :hidden скажет валидатору не проверять скрытые поля).Не уверен, что вы использовали его таким образом.

...