Примечание:
Этот вопрос относится к очень старой версии jQuery.validate() (версия 1.5). Этот плагин теперь предоставляет встроенное решение для этого: .rules()
method, который следует использовать вместо этого. Я оставляю этот вопрос и отвечу в его первоначальной форме для исторических целей для тех, кому необходимо поддерживать устаревший сайт, который не может обновиться до последних версий jQuery и jQuery.validate().
У меня есть форма, которая переключает видимые элементы ввода. Я хочу проверить только видимые элементы в форме.
Мне сложно заставить это функционировать правильно. Я хочу отключить валидаторы для невидимых элементов, и я не могу понять, как это сделать. Любое понимание того, что может быть неправильно с моим кодом, или мой подход, будут оценены.
Когда видимость переключается, я пробовал несколько вещей:
- Вызов
$("form").rules("remove")
для удаления всех существующих правил проверки. Это исключает исключение JavaScript undefined. - Вызов
$("form").validation(...options...)
для видимых элементов, надеясь, что это перепишет правила. Это позволяет только первой группе, которая проверена на работу. Вторая панель не может быть проверена. - Отвязывание обработчика отправки перед вызовом нового метода
validation()
. Это не сделало того, что я мог бы подумать. Он удаляет всю проверку (по-видимому) навсегда и форма отправляется без проверки. - Очистите объект проверки с помощью
$.removeData($('form'), 'validator')
, прежде чем пытаться снова вызвать валидатор. Это также не работает. - Это на сайте ASP.NET, поэтому использование нескольких тегов
<form />
не может быть и речи, так как это сломает страницу.
Я как бы не понимаю, как это сделать. Вы можете увидеть полную рабочую демонстрацию того, что у меня есть в http://jsbin.com/ucibe3
, или отредактировать ее в http://jsbin.com/ucibe3/edit
. Я попытался разбить его только на код, вызывающий ошибку.
Вот ключевые фрагменты моего кода (используйте ссылки выше для полной рабочей страницы)
HTML:
<td id="leftform">
Left Form<br />
Input 1: <input type="text" name="leftform_input1" /><br />
Input 2: <input type="text" name="leftform_input2" /><br />
<input type="submit" name="leftform_submit" value="Submit Left" />
</td>
<td id="rightform" style="visibility:hidden">
Right Form<br />
Input 1: <input type="text" name="rightform_input1" /><br />
Input 2: <input type="text" name="rightform_input2" /><br />
<input type="submit" name="rightform_submit" value="Submit Right" />
</td>
JavaScript:
$('#toggleSwitch').click(function() {
if ($('#leftform').css("visibility") !== "hidden") {
$('#leftform').css("visibility", "hidden");
$('#rightform').css("visibility", "visible");
$('form').validate({
rules: {
rightform_input1: { required: true },
rightform_input2: { required: true }
},
messages: {
rightform_input1: "Field is required",
rightform_input2: "Field is required"
}
});
} else {
$('#rightform').css("visibility", "hidden");
$('#leftform').css("visibility", "visible");
$('form').validate({
rules: {
leftform_input1: { required: true },
leftform_input2: { required: true }
},
messages: {
leftform_input1: "Field is required",
leftform_input2: "Field is required"
}
});
}
});