2011-05-18 72 views
0

因此,我使用jQuery的.change()函數來觸發特定表中其他字段的驗證。看到下面的代碼....我遇到的問題是這樣的:如果我在輸入字段中鍵入一些東西,然後刪除它,它仍然認爲它已更改,並需要其他字段。我可以看到這對用戶來說是一個問題,無論如何圍繞這個問題呢?在jQuery中使用.change()進行驗證

p.s. class =「R」來自我的自定義驗證並將其設置爲必填字段。

$('#t1 :input').change(function(){           

     var $t1Input = $('#t1Table :input:not(input[type=hidden])'); 
     var hasData = false; 


    $t1Input.each(function(){ 
      if($(this).val().length > 0){ 
       hasDatat1 = true; 
       return false; 
      } 
     }); 
     // Change class of input field to "R" if something has been changed 
      if(hasDatat1) 
       $t1Input.addClass('R');                 
      else 
       $t1Input.removeClass('R'); 
     }); 
+0

你要單獨驗證每個領域,因爲它的變化,這樣就可以給一些跡象表明,該字段是有效的,當他們完成鍵入一個有效的字符串?正確? – 2011-05-18 14:23:56

+0

@Kevin,它將會彈出一個警告框供驗證,但所有這些都已經完成。 .change()似乎會觸發任何更改,即使它已恢復到原始狀態。即具有輸入到其中的信息的文本框,然後用戶刪除該信息。 – Dan 2011-05-18 14:53:09

回答

1

試試這個:

$('#t1 :input').change(function(){ 
    if ($(this).val() == '') return; 
1

您可以使用jQuery的.data()功能存儲的價值和檢查你的代碼

0

真正的變化。如果我看了你的問題的權利,這將驗證各個輸入驗證沒有在所有輸入t1Table每次更改。

$('#t1 :input:not(input[type=hidden])').change(function() { 
    if($(this).val() == '') { $(this).addClass('R'); } 
    else { $(this).removeClass('R'); } 
}); 

我知道你沒有問這個,但所以我讀入你的問題,你提到的「用戶問題」。爲了可用性,我並不是說切換到Dojo而不是JQuery。事實上,我最終比使用Dojo更多地使用JQuery,因爲它似乎有更多的關注。但是,Dojo有一種非常好的驗證表單數據的方式,並且可以在不惱人的情況下爲用戶提供即時反饋。您可能想要查看有關爲用戶提供良好用戶界面流的想法。