2010-04-15 2 views
0

У меня есть диалоговое окно 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'); 
        //.... 
       } 
      } 
    } 
}); 

Я получаю такую ​​же проблему.

ответ

0

Это будет работать, если вы используете invalidHandler function available на валидации плагина, например:

jQuery("#myForm").validate({ 
    invalidHandler: function(form, validator) { 
     jQuery('#recording_tabs > div').each(function(i){ 
     if(jQuery('.invalid:not(label)', this).length){ 
      jQuery('#recording_tabs').tabs('option','selected', i); 
      return false; 
     } 
     }); 
    } 
}); 

invalidHandler работает только тогда, когда есть ошибки и после того, как применяются классы, так что это будет правильно перейти на вкладку с элементом class="invalid", который не является ярлыком.

Смежные вопросы