为啥javascript在'return false'之后工作?
Posted
技术标签:
【中文标题】为啥javascript在\'return false\'之后工作?【英文标题】:why javascript working after 'return false'?为什么javascript在'return false'之后工作? 【发布时间】:2015-06-03 00:27:33 【问题描述】:您好,我有一个用于动态添加文本框的 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 那么这是怎么发生的,请帮助我
【问题讨论】:
Each function has it's own returned value! 也显示 html,但我相信each()
内的 return false
会提前退出每个函数,而不是父函数。
但我一次只想要一个警报,但它同时显示两个
您可以用简单的for
循环替换.each
,然后用break
语句替换return
。
【参考方案1】:
在显示警报时设置一个标志,如果设置了标志,请尽早退出。
$(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;
不起作用?
在.each()
回调函数中return false;
不够的原因是,它所做的只是停止处理jQuery 集中其余匹配的元素。
来自jQuery docs:
您可以通过返回
false
从回调函数中停止循环。
换句话说,它所做的只是让.each()
调用比正常情况更快完成。
不过,无论何时完成,在代码中第一个 .each()
调用之后执行的下一行代码都是第二个 .each()
调用。它不知道第一个 .each()
调用发生了什么,因此它将从第一个匹配的元素开始并为其调用提供的函数,然后继续处理其余匹配的元素,除非该函数返回 false
,什么时候停止。
【讨论】:
@askm3 我添加了解释为什么还不够,如果您仍然感到困惑,请告诉我。【参考方案2】:var blank_found = false;
$(".medicine_name").each(function (i)
var id=this.id;
var value=$("#"+id).val();
if(value.trim()=="")
blank_found=true;
alert('Medicine name should not be empty');
return false;
);
if (blank_found)
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;
);
【讨论】:
【参考方案3】:你可以用这个..
$(document).on('click','#med_submit',function()
var isempty=false;
$(".medicine_name").each(function (i)
var id=this.id;
var value=$("#"+id).val();
if(value.trim()=="")isempty=true; 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()=="") isempty=true; alert('Quantity name should not be empty'); return false;
);
if ( isempty==true )
return false;
);
【讨论】:
以上是关于为啥javascript在'return false'之后工作?的主要内容,如果未能解决你的问题,请参考以下文章
当返回值在新行时,为啥 Javascript 返回语句不起作用?
为啥 + [] 在 Javascript 中返回 0? [复制]
为啥 Javascript getYear() 返回 108?