2013-06-27 27 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