我在页面上有很多输入,需要强制至少填写5个项目。如果没有,那么显示一条消息说你必须填写至少5.到目前为止,我已经尝试了以下但它只是一遍又一遍地显示错误。这样做的正确方法是什么?
$('div.inputs input').each(function(i) {
$input = $(this);
while (i < 5) {
if ($($input).val() == '') {
alert('must fill at least 5 items!');
}
}
});
答案 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个非空值,就不需要继续计数。