2011-01-21 47 views
3

我基本上試圖做一個表單驗證。 Evertyhing工作正常。除了一件事。首先,這裏是我的代碼:jQuery隱藏元素和isVisible問題

 $('#submit_btn').click(function(){ 

     $("input:not([type=radio],[type=checkbox])").each(function() { 
       if ($(this).val() == ""){ 
       $('#'+$(this).attr("name")+'_error').show(""); 
       } 
       else{ 
        $('#'+$(this).attr("name")+'_error').hide("normal"); 
       } 

      }); 
      if(!($("div[id$=error]").is(":visible"))) 
           alert("a"); 

     }); 

點擊提交按鈕後,它會檢查不是單選按鈕或複選框輸入。如果輸入爲空,則顯示錯誤。

如果輸入了某些內容,則會隱藏錯誤。

最後我檢查是否有任何錯誤信息可見,如果沒有,我會提交表單。

我的問題是,我用.hide(「normal」)的小動畫隱藏錯誤信息。所以我相信在隱藏最後一條錯誤消息的過程中,我的最後一條if語句會執行,並且它認爲有可見的錯誤消息(但是,它正在隱藏)

如何執行我的if語句隱藏進程完成後?

在我的情況下,當沒有錯誤信息時,我會在另一次點擊提交按鈕後得到警報。

我希望我清楚我的問題。如果沒有,我會嘗試重寫它。

謝謝!

+1

以另一種方式,我建議你嘗試一下jQuery的驗證插件,而不是自己編寫整個解決方案。試試這個,最流行的用jQuery進行驗證:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ – mdrg

回答

5

這樣做與:visible是有點哈克,肯定很慢。如果你的目標是展示.hide("normal")函數執行完畢後,動畫,那麼你需要傳遞一個「回調」函數作爲參數傳遞給.hide()功能警報消息

$('#submit_btn').click(function(){ 
    var error = false; 

    $("input:not([type=radio],[type=checkbox])").each(function() { 
     if ($(this).val() == ""){ 
      $('#'+$(this).attr("name")+'_error').show(400); 
      error = true; 
     } 
     else{ 
      $('#'+$(this).attr("name")+'_error').hide(400); 
     } 
    }); 
    if(error) 
     alert("a"); 

}); 
+1

同意。另外,我相信「正常」不再被正式支持 - 如果jQuery UI包含在同一頁面上,它將會中斷。請參閱:http://stackoverflow.com/questions/2578204/jquery-1-4-2-is-foo-hidenormal-broken-or-am-i-crazy – karim79

+0

我剛剛建議同樣的事情。最好使用代碼中已有的數據,而不是試圖從前面代碼的副作用中重新創建數據。 – Guffa

+0

@ karim謝謝:我已經放了一段時間。 – lonesomeday

0

:使用一個變量,而不是。 See the documentation

在這裏看到一個例子:

​​

我的2美分... 我會說雖然,你可能想聽聽大家的鼓勵,尋求一個優雅的形式驗證插件。