0

我需要检查所有输入以查看它们是否已填写,在这种情况下,提交按钮将变为可按下并且用户可以安全地提交他们的数据:

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

这段代码有效,但有一个奇怪的转折;当最后一个空输入获得一个字符时,它仍然返回true. 如果输入获得另一个字符,那么它只会返回false。我对此感到困惑,因为我知道该.each()函数是在添加字符并且输入的值已更新后触发的。因此,我不明白为什么它不注册该值。

4

4 回答 4

2

您应该在进入循环之前设置unfilled为(但在 INSIDE 内)。falsekeyup

在循环中,您应该仅在字段为空时设置unfilledtrue,而不要false再次设置为,否则您只会知道最后一个字段是否已填写。

于 2013-06-27T11:41:30.870 回答
1

您可以使用过滤器并使用 keyup 事件代替 del 键:

演示

$('.add-field').keyup(function () {
    var unfilled = !! $('.add-field').filter(function () {
        return $.trim(this.value) === ""
    }).length;
    console.log(unfilled);
});
于 2013-06-27T11:47:39.457 回答
0

据我所知,这是使用KeyPress事件时的“问题” ,因为浏览器的 UI 线程尚未更新输入字段的值。因此,当前的值仍然是“空”,因此true被返回;您可以使用KeyUp -event 或尝试以下操作:JavaScript keypress event get end value of textarea

于 2013-06-27T11:38:22.787 回答
0

===意味着它与数据类型完全匹配:

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

将其替换为==

 if($(this).val() == ''){
于 2013-06-27T11:36:29.643 回答