0

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

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

2 回答 2

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!');
}
于 2012-04-24T08:57:30.267 回答
2

KARASZI Istvá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 个非空值,就无需继续计数。

于 2012-04-24T09:18:25.527 回答