jQuery检查至少有五个输入包含数据

时间:2012-04-24 08:54:35

标签: javascript jquery

我在页面上有很多输入,需要强制至少填写5个项目。如果没有,那么显示一条消息说你必须填写至少5.到目前为止,我已经尝试了以下但它只是一遍又一遍地显示错误。这样做的正确方法是什么?

$('div.inputs input').each(function(i) {
    $input = $(this);
    while (i < 5) {
        if ($($input).val() == '') {
            alert('must fill at least 5 items!');
        }
    }
});​

2 个答案:

答案 0 :(得分:2)

<击> 您可以创建一个更好的选择器,然后:

if ($('div.inputs input[value!=""]').length < 5) {
  alert('must fill at least 5 items!');
}

说明:

div.inputs input[value!=""]选择器选择具有value属性中某些内容的所有输入字段,然后您可以获取所选项目的长度。

之前的解决方案有效(不知何故),但我建议更好一个:

if ($('div.inputs input').filter(function () { return $(this).val().length > 0; }).length < 5) {
  alert('must fill at least 5 items!');
}

答案 1 :(得分:2)

KARASZIIstván的回答中显示的方法比较简洁,但就解释代码的错误以及如何修复它而言,(主要)问题是while条件:

while(i<5)

...正在评估一个变量i,它不会被循环内容改变。 .each()循环i的第一次迭代为0,因此while条件为真并保持为真,因此您将获得无限循环。

要保持代码的一般结构并循环遍历每个输入,测试值可以执行以下操作:

var filled = 0;

$('div.inputs input').each(function (i) {
    if (this.value != '') {
        filled++;
        if (filled === 5)
           return false;
    }
});

if (filled < 5) {
    alert('must fill at least 5 items!');
}

也就是说,对于每个非空白的输入递增一个计数器,然后在循环后检查计数器。请注意,从false回调函数中返回.each()会立即停止.each()循环;一旦我们达到最小的5个非空值,就不需要继续计数。