首先看一下这段代码。示例I有5个输入字段,它们具有必需的类。
var errMsg = "This is required!"
$(function() {
$(".required").each(function() {
if($(this).val() == "" || $(this).val == errMsg) {
$(this).val(errMsg);
}
else {
alert("This should alert once");
}
});
}
我知道如果该字段有价值,它会提醒5次。我该怎样预防呢?我怎么能提醒它一次?我已经使用
了event.stopImmediatePropagation
event.preventDefault
答案 0 :(得分:4)
目前还不完全清楚你要做什么。两个选项:
停止each
循环:
您可以返回false
:
each
循环
var errMsg = "This is required!"
$(function() {
$(".required").each(function() {
if($(this).val() == "" || $(this).val == errMsg) {
$(this).val(errMsg);
}
else {
alert("This should alert once");
return false; // <=== Stop `each`
}
});
}
有关详细信息,请参阅the documentation。
设置标志:
如果您希望循环继续,但alert
仅发生一次,请使用标记:
var errMsg = "This is required!"
$(function() {
var alerted = false;
$(".required").each(function() {
if($(this).val() == "" || $(this).val == errMsg) {
$(this).val(errMsg);
}
else {
if (!alerted) {
alerted = true;
alert("This should alert once");
}
}
});
}
如果这样做(让循环继续),请参阅Guffa's answer。他将警报移到了each
之外,这使您可以更灵活地呈现信息,并且更加清晰。
偏离主题:每次调用$()
时,它会进行3-4次函数调用并分配内存。如果您发现自己在函数中重复相同的$()
,请考虑一次并重复使用它。所以而不是:
if($(this).val() == "" || $(this).val == errMsg) {
$(this).val(errMsg);
}
这样做
var $this = $(this);
if($this.val() == "" || $this.val == errMsg) {
$this.val(errMsg);
}
大部分时间没关系,因为你不会做几千次的事情,但这是一个很好的习惯。显然,如果您正在进行DOM查询并且DOM可能在一次调用和下一次调用之间发生了变化,那么不会缓存结果......
答案 1 :(得分:2)
你应该把警报放在循环之外,然后你需要一个变量来跟踪是否有空字段:
var errMsg = "This is required!"
$(function() {
var showMsg = false;
$(".required").each(function() {
if($(this).val() == "" || $(this).val == errMsg) {
$(this).val(errMsg);
} else {
showMsg = true;
}
});
if (showMsg) alert("This should alert once");
}
答案 2 :(得分:1)
$(function() {
$(".required").each(function() {
if($(this).val() == "" || $(this).val == errMsg) {
$(this).val(errMsg);
}
else {
alert("This should alert once");
return false; // break the loop;
}
});
}
答案 3 :(得分:1)
使用旗帜。
var errMsg = "This is required!"
$(function() {
var ok = true;
$(".required").each(function() {
if($(this).val() == "" || $(this).val == errMsg) {
$(this).val(errMsg);
}
else {
if(ok){
alert("This should alert once");
ok = false;
}
}
});
}
答案 4 :(得分:0)
试试这个代码
$(function() {
var errMsg = "This is required!";
$alert_once = 0;
$(".required").each(function() {
if($(this).val() == "" || $(this).val() == errMsg) {
$(this).val(errMsg);
$alert_once = 1;
}
else {
alert("This should alert once");
}
});
if ($alert_once == 0) {
alert('Alert Once');
}
}