Устаревшее уведомление:
Этот ответ относится к чрезвычайно старой версии плагина jQuery.validate () (версия 1.5) и в настоящее время устарел, поскольку плагин предоставляет официальный API для решения этой проблемы. См. .rules()
документацию для текущего подхода к решению этой проблемы. Я оставляю этот ответ «как есть», чтобы помочь любому, кто должен поддерживать устаревший сайт, который не может обновиться до последних версий jQuery и jQuery.validate ().
При этом используется функция валидатора, которая недостаточно хорошо документирована в API (и под этим я подразумеваю, что она вообще не документирована), однако, поскольку она является фундаментальной частью работы валидатора, маловероятно, что подлежит удалению, даже если он не имеет документов.
После инициализации валидатора jQuery вы можете снова получить доступ к объекту валидатора, вызвав метод validate()
для объекта формы, к которому вы применили валидатор. Этот объект валидатора имеет свойство settings
, в котором хранятся настройки по умолчанию в сочетании с настройками, примененными к нему при инициализации.
Предполагается, что я инициализирую валидатор следующим образом:
$('form').validate({
rules: {
leftform_input1: { required: true },
leftform_input2: { required: true }
},
messages: {
leftform_input1: "Field is required",
leftform_input2: "Field is required"
}
});
Затем я могу получить эти точные настройки из валидатора, выполнив следующие действия:
var settings = $('form').validate().settings;
Затем я могу легко работать с этим объектом настроек, чтобы добавлять или удалять валидаторы для формы.
Вот как бы вы удалили правила проверки:
var settings = $('form').validate().settings;
delete settings.rules.rightform_input1;
delete settings.messages.rightform_input1;
А вот как бы вы добавили правила проверки:
var settings = $('form').validate().settings;
settings.rules.leftform_input1 = {required: true};
settings.messages.leftform_input1 = "Field is required";
Вот рабочее решение для сценария в моем вопросе. Я использую метод jQuery extend()
, чтобы перезаписать свойства rules
и messages
объекта validate
, что позволяет переключаться между двумя панелями.
$('#toggleSwitch').click(function() {
var settings = $('form').validate().settings;
var leftForm = $('#leftform');
var rightForm = $('#rightform');
if (leftForm.css("visibility") !== "hidden") {
leftForm.css("visibility", "hidden");
rightForm.css("visibility", "visible");
$.extend(settings, {
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");
$.extend(settings, {
rules: {
leftform_input1: { required: true },
leftform_input2: { required: true }
},
messages: {
leftform_input1: "Field is required",
leftform_input2: "Field is required"
}
});
}
});