У меня есть диалоговое окно 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
}
});
}
Итак, что происходит в приведенном выше коде, так это то, что когда мы нажимаем «ОК», мы получаем предупреждение «мы здесь» для каждого элемента (вкладки), а затем ничего не происходит. Повторное нажатие кнопки «ОК» дает нам предупреждение «мы здесь» до тех пор, пока мы не попадем на вкладку с ошибками.
Так что, очевидно, первый раз во внутреннем операторе if ложно для каждой вкладки, что, вероятно, означает, что jQuery не зарегистрировал «недопустимые» классы во времени. Поэтому я пробовал пустое выражение each () прямо перед основным в надежде, что это решит проблему
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');
//....
}
}
}
});
У меня та же проблема.