#jquery #jquery-ui #jquery-validate #validation #lightbox
#jquery #jquery-пользовательский интерфейс #jquery-проверка #проверка #лайтбокс
Вопрос:
В настоящее время у меня есть форма в рамке лайтбокса на моей веб-странице. Когда пользователь отправляет форму с неверными данными, в верхней части формы появляется div со списком ошибок формы. Проблема в том, что мне нужен какой-то обратный вызов проверки jQuery, чтобы изменить размер лайтбокса после появления div ошибок. Насколько мне известно, нет способа сделать это с помощью jQuery lightbox.
Комментарии:
1. Вы имеете в виду лайтбокс iframe? Вы проверяете форму с помощью плагина или собственного скрипта?
Ответ №1:
вы должны предоставить недопустимую функцию обратного вызова, которую вы можете найти задокументированной здесь, вот так
$(".selector").validate({
invalidHandler: function(form, validator) {
var errors = validator.numberOfInvalids();
if (errors) {
//resize code goes here
}
}
})
Комментарии:
1. Я предполагаю, что мне не приходило в голову обрабатывать все отображение ошибок и размещение в функции invalidHandler. Спасибо!
2. как бы вы подключили этот обработчик после того,
.validate
как он уже был инициализирован / вызван?
Ответ №2:
В качестве альтернативы вы можете использовать функцию обратного вызова errorPlacement, чтобы воздействовать на конкретный элемент, который не прошел проверку. В качестве примера приведенный ниже код использует обратный вызов errorPlacement для присвоения классу родительского тега div каждого недопустимого элемента формы значения «error», а затем удаляет класс «error», как только элемент проходит проверку :
form.validate({
rules: {
Name: {
required: true
},
Email: {
required: true
, regex: "^[0-9a-zA-Z. _-] @{1}[0-9a-zA-Z. _-] \. [a-zA-Z]{2,4}$"
}
},
messages: {
Name: {
required: "Please give us your name"
},
Email: {
regex: "Please enter a valid email address"
}
},
errorPlacement: function(error, element) {
element.parent().addClass("error");
},
success: function(element) {
$("#" element.attr("for")).parent().removeClass("error");
}
});