嗨,我有一个用于动态添加文本框的JavaScript验证代码,当文本框具有空值并且不在那里停止时,它将显示警报
$(document).on('click', '#med_submit', function () {
$(".medicine_name").each(function (i) {
var id = this.id;
var value = $("#" + id).val();
if (value.trim() == "") {
alert('Medicine name should not be empty');
return false;
}
});
$(".medicine_quantity").each(function (i) {
var id = this.id;
var value = $("#" + id).val();
if (value.trim() == "") {
alert('Quantity name should not be empty');
return false;
}
});
});
这是我的脚本,在
medicine_name
每个函数中,有一个medicine_name
类文本框为空,然后显示警报消息,它也将转到下一个medicine_quantity
每个函数并也显示该警报,这里我使用return false警报过后,这是怎么回事,请帮助我 最佳答案
仅在显示警报时设置一个标志,如果设置了标志,则提早保释。
$(document).on('click', '#med_submit', function() {
var alertShown = false;
$(".medicine_name").each(function(i) {
var id = this.id;
var value = $("#" + id).val();
if (value.trim() == "") {
alert('Medicine name should not be empty');
alertShown = true;
return false;
}
});
if (alertShown) return;
$(".medicine_quantity").each(function(i) {
var id = this.id;
var value = $("#" + id).val();
if (value.trim() == "") {
alert('Quantity name should not be empty');
return false;
}
});
});
return false;
为什么不起作用?仅在
return false;
回调函数中使用.each()
的原因是,所做的只是停止处理jQuery集中的其余匹配元素。从jQuery docs:
您可以通过返回
false
从回调函数中停止循环。换句话说,它所做的就是使
.each()
调用比通常更快地完成。但是,无论何时完成,在代码中的第一个
.each()
调用之后要执行的下一行代码是第二个.each()
调用。它不知道第一个.each()
调用会发生什么情况,因此它将从第一个匹配的元素开始并为其调用提供的函数,然后继续其余匹配的元素,除非该函数返回false
,什么时候会停止。