2010-04-15 61 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 
     } 
    }); 
} 

在上面的代碼那麼什麼情況是,當我們點擊「OK」我們得到了一個「我們在這裏」戒備每個DIV(標籤),然後什麼也沒有發生。點擊「確定」再次給我們'我們在這裏'警報,直到我們被帶到錯誤的標籤。

因此很明顯,第一次輪內部if語句對於每個選項卡都是false,這可能意味着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"元素不是標籤。