使用JS或jQuery检查所有输入是否具有零值。

3

我正在尝试检查所有输入 (.productTextInput) 是否都为零。

如果它们全部为零,则执行警报,但仅当它们全部为零时才执行。

我已经能够检查第一个以及所有单独的输入,但是无法同时检查所有输入。

HTML

<div class="container">
    <div class="listQuantity">
        <input type="text" class="productTextInput" name="AddToCart_Amount" value="0">
    </div>
    <div class="listQuantity">
        <input type="text" class="productTextInput" name="AddToCart_Amount" value="0">
    </div>
    <div class="listQuantity">
        <input type="text" class="productTextInput" name="AddToCart_Amount" value="0">
    </div>
</div>

脚本

$('.productTextInput').each(function() {
    if ($(this).val() <= 1){
        alert("Must choose at least one product");
    } else {
        // do something
    }
});

1
在有人再次发布之前:不,你不能使用 $('.productTextInput[value="0"]') 来实现这个功能,它检查的是 属性,而不是用户输入的内容:证明 (源代码) 输入一个非零值并单击按钮。 - T.J. Crowder
5个回答

10

您可以使用filter来实现此操作:

if ($('.productTextInput').filter(function() {
        return parseInt(this.value, 10) !== 0;
    }).length === 0) {
    // They all have zero
}
else {
    // At least one has a non-zero value
}

1
@DarrenDavies: 是的 :-) 但是,如果您更改.each测试以使用this.value而不是完全不必要的$(this).val(),它几乎可以赶上:http://jsperf.com/test-case122/2(尽管在这里速度很重要) - T.J. Crowder

6
$input_val = true;
$('.productTextInput').each(function() {
    if ($.trim($(this).val()) <= 1){
        $input_val = false;
        return false;
    } else {
        // do something
    }
});

if(!$input_val){
    alert("Must choose at least one product");
}

1
$('.productTextInput').each(function( index, value ) {
    if (parseInt($(this).val())>0){alert("Must choose at least one product");}
});

1
var valid = false;
$('.productTextInput').each(function() {
    if (!valid && this.value == 1){
        valid = true;
    }
});

if(!valid){
    alert("Must choose at least one product");
}

那个逻辑不正确,是吗?请看我的评论,Arun的回答中有相同的代码。 - T.J. Crowder
是的,即使其中一个框为!0,它也会显示警报:http://jsbin.com/okosak/2/edit - T.J. Crowder
Arun现在已经修复了,所以这是我上面提到的评论(我现在已经删除了):“那个逻辑不正确,对吧?你使用flag = true表示它们全部为0,但是如果其中任何一个<= 1,则将标志设置为false。这没有意义。(另外,<= 1和=== 0之间有很大的区别。)” - T.J. Crowder

0
在循环中使用标志变量来检查情况。
var flag = true;
$('.productTextInput').each(function() {
    if ($(this).val() != 0){
        flag = false;
        return false
    }
});

if(!flag){
    alert('at least one is more than 0')
}

@T.J.Crowder 是的,问题已经解决了。 - Arun P Johny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接