2013-06-27 36 views
0

我需要檢查所有的輸入,看看他們是否充滿,在這種情況下,提交按鈕將成爲可按壓,用戶可以放心地提交數據:爲什麼這個jQuery輸入值檢查器不起作用?

unfilled = false; 
$('.add-field').keypress(function(){ 
    $('.add-field').each(function(){ 
     if($(this).val() === ''){ 
      unfilled = true; 
     } else { 
      unfilled = false; 
     } 
    }) 
    console.log(unfilled); 
}); 

此代碼的工作,但它有一個奇怪的捻;當最後一個空輸入獲得一個字符時,它仍然返回true。如果輸入獲得另一個字符,則只有它返回false。我對此感到困惑,因爲我知道.each()函數在一個字符被添加並且輸入的值已被更新後被觸發。因此,我不明白爲什麼它沒有註冊那個價值。

+1

改變只是其中之一時,你怎麼會覺得需要檢查每一個'附加field'?爲什麼不直接檢查自己?其他人也只是檢查自己。 – h2ooooooo

回答

1

您可以使用過濾器和使用keyup事件,而不是爲Del鍵:

DEMO

$('.add-field').keyup(function() { 
    var unfilled = !! $('.add-field').filter(function() { 
     return $.trim(this.value) === "" 
    }).length; 
    console.log(unfilled); 
}); 
+0

這很好,謝謝。 – styke

0

這裏===意味着它是精確匹配的數據類型:

if($(this).val() === ''){ 

==替換爲:

if($(this).val() == ''){ 
+0

他爲什麼要這樣做? –

+0

這不起作用。這個問題不適用於數據類型。 – styke

2

您應該設置unfilledfalse進入循環前(但內裏的keyup)。

在循環中,您應該只設置unfilledtrue當字段emty而不是重新設置爲false,否則如果最後一個字段填入你只知道。

+0

這就是我現在所做的。應該更清楚了。 – styke

+0

問題中的代碼仍然在循環內設置'unfilled'爲'false' – rednaw

+0

哦,等等,你刪除了循環..現在我不再關注了:P – rednaw