为什么这个jQuery输入值检查器不起作用?

时间:2013-06-27 11:32:24

标签: javascript jquery validation input

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

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 个答案:

答案 0 :(得分:2)

在进入循环之前,您应该将unfilled设置为false(但在keyup内)。

在循环中,您只应在字段为emty时将unfilled设置为true,而不是再次将其设置为false,否则您只会知道最后一个字段是否已填充英寸

答案 1 :(得分:1)

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

DEMO

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

答案 2 :(得分:0)

此处===表示它与数据类型完全匹配:

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

将其替换为==

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

答案 3 :(得分:0)

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