我需要检查所有输入以查看它们是否已填满,在这种情况下,提交按钮将变为可按下并且用户可以安全地提交数据:
unfilled = false;
$('.add-field').keypress(function(){
$('.add-field').each(function(){
if($(this).val() === ''){
unfilled = true;
} else {
unfilled = false;
}
})
console.log(unfilled);
});
这段代码有效,但它有一个奇怪的转折;当最后一个空输入获得一个字符时,它仍然返回true
。如果输入获得另一个字符,则只返回false
。我对此感到困惑,因为据我所知,在添加一个字符并更新输入值后会触发.each()
函数。因此,我不明白为什么它没有注册该值。
答案 0 :(得分:2)
在进入循环之前,您应该将unfilled
设置为false
(但在keyup
内)。
在循环中,您只应在字段为emty时将unfilled
设置为true
,而不是再次将其设置为false
,否则您只会知道最后一个字段是否已填充英寸
答案 1 :(得分:1)
您可以使用过滤器并使用keyup事件代替del键:
$('.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