У меня есть диалоговое окно jquery, которое появляется и принимает данные пользователя через форму. Как только пользователь будет закончен, он нажимает кнопку «ok». В этом диалоговом окне есть несколько «вкладок», так что при нажатии «ОК» мы хотим проверить все данные, указанные на каждой вкладке. Если что-то недействительно, мы берем пользователя на эту вкладку и сообщим им, что не так.Проверка jQuery с помощью диалогового окна
Однако для достижения этой цели требуется 2 щелчка. Вот виновный JQuery:
if(errors){
// display the tab with the error
jQuery('#recording_tabs > div').each(function(i){
alert('we are here');
if(jQuery(this).find('*').not('label').hasClass('invalid')){
jQuery('#recording_tabs').tabs('option','selected', i);
return false;// prevent further processing
}
});
}
Так что же происходит в коде выше, что, когда мы нажимаем «ОК» мы получаем «мы здесь» предупреждение для каждого DIV (вкладки), а затем ничего не происходит. Нажатие «ok» снова дает нам предупреждение «мы здесь», пока мы не попали на вкладку с ошибками.
Таким образом, очевидно, что первый раз, когда внутренний оператор if является ложным для каждой вкладки, что, вероятно, означает, что jQuery не зарегистрировал «недействительные» классы во времени. Так что я попытался пустой каждый() заявление непосредственно перед главным в надежде, что это будет исправить проблему
jQuery('#recording_tabs > div').each(function(i){});
Но я получил тот же результат.
Может ли кто-нибудь заметить что-нибудь, что мне не хватает?
Благодарим за ответ. Кажется, что я уже использую invalidHandler
. Вот полный код окружающий (я не пишу):
someForm.validate({
errorClass: "invalid",
invalidHandler : function(e, validator){
var errors = validator.numberOfInvalids();
var msg = jQuery("#message", someForm);
if(errors){
// display the tab with the error
jQuery('#recording_tabs > div').each(function(i){
if(jQuery('.invalid:not(label)', this).length){
jQuery('#recording_tabs').tabs('option','selected', i);
return false;// prevent further processing
}
});
}
else{
msg.hide();
}
},
rules: { ... //blah }
});
И это называется через:
someDialog.dialog({
//... blah
buttons: {
'Cancel' : function(){
jQuery(this).dialog('close');
},
'Ok' : function(){
var valid = someForm.validate().form();
if(valid){
jQuery(this).dialog('close');
//....
}
}
}
});
Я получаю такую же проблему.