JavaScript return false 不会阻止其他函数执行
Posted
技术标签:
【中文标题】JavaScript return false 不会阻止其他函数执行【英文标题】:JavaScript return false is not stopping other functions from executing 【发布时间】:2013-06-17 18:59:53 【问题描述】:我有一些 JS 函数在单击页面上的“保存”按钮时运行。该按钮如下所示:
<img src="images/btn/save.gif" name="btnSubmit" onClick="noSpaceTest();minMaxValues();compare2dates(benefit_start_date, benefit_end_date,'javascript:saveNewBenefit()')" border="0" class="btnimg">
我感兴趣的函数是 minMaxValues()。如果此测试失败,则不应提交表单(在这种情况下,这意味着不应运行任何其他函数。)我使用了 return false;在 minMaxValues() 函数中,它运行(警告错误值)但在解除警报后,正在调用其他函数,而不是 stopping。
函数如下:
//Function to validate if maximum benefit value is more the minimum benefit value
function minMaxValues()
var maxAmt = ($('#maxAmount').val());
var minAmt = ($('#minAmount').val());
if ((minAmt != '') && (maxAmt != ''))
try
maxAmt = parseInt(maxAmt);
minAmt = parseInt(minAmt);
if(maxAmt < minAmt)
alert('The maximum benefit amount must be larger than the minimum amount.');
return false;
catch(e)
return false;
//end maxAmt minAmt comparison
return true;
//end minMaxValues function
如果这个函数返回 false,有没有办法不允许任何进一步的函数执行?
【问题讨论】:
请注意,如果您的 onclick 中没有完整的脚本,这将不是问题。 :) 如果你调用了一个在失败时返回 false 的函数,那么一切都会正常工作——而且更具可读性。 @cHao 我完全同意你的看法。我正在与一个团队一起使用方式的遗留代码,所以我能/不能做的事情受到严重限制。 【参考方案1】:"btnSubmit" onClick="noSpaceTest();minMaxValues()?:return;compare2dates(benefit_start_date, benefit_end_date,'javascript:saveNewBenefit()')" border="0" class="btnimg">
或
"btnSubmit" onClick="noSpaceTest();if(!minMaxValues())return;compare2dates(benefit_start_date, benefit_end_date,'javascript:saveNewBenefit()')" border="0" class="btnimg">
应该停止提交以及停止其他函数的执行
编辑:你真的应该把它全部放在一个更干净的点击处理函数中,这只是一个快速修复
【讨论】:
哈哈,没问题,你能确认我现在上面的代码有效吗?我第一次发布后确实编辑了几次 @dihakz 最好将您的逻辑封装在一个函数中,并在单击按钮时调用此函数。看看 Maciej 的回答。它更干净。 @stackErr 是对的,最好你的 onclick 调用一个函数 @Stephan 你希望我给谁“奖励”答案?就我而言,这是首选的解决方案(更快、更容易的错误修复),尽管另一个更像是“最佳实践” @Stephan 我忘了评论:是的,它正在按照现在的编写方式工作。但是,它的原始编写方式(如下)效果更好,因为它仍然会发出警报(我正在使用的也是如此。)if(!minMaxValues())return;
【参考方案2】:
您可以编写一个封装您的逻辑的函数:
function clickHandler()
noSpaceTest();
var minMax = minMaxValues();
if(minMax)
compare2dates(benefit_start_date, benefit_end_date,'javascript:saveNewBenefit()')
然后
<img src="images/btn/save.gif" name="btnSubmit" onClick="clickHandler();" border="0" class="btnimg">
【讨论】:
这无疑是最“正确”和更清洁的解决方案。不幸的是,脚本是外部的,我不能在那里修改它,只能在执行时修改。【参考方案3】:<script>
function chuma()
noSpaceTest();
if(minMaxValues())
compare2dates(benefit_start_date, benefit_end_date,'javascript:saveNewBenefit()');
</script>
<img src="images/btn/save.gif" name="btnSubmit" onClick="chuma();" border="0" class="btnimg">
这行得通。我希望这就是你要找的。p>
【讨论】:
【参考方案4】:不要返回 false,而是尝试返回。 return false 仍然返回要评估的值,而 return 只是退出函数。编辑:也许尝试一个回调函数而不是返回。
【讨论】:
这绝对是我需要进一步探索的东西。谢谢你的推荐。以上是关于JavaScript return false 不会阻止其他函数执行的主要内容,如果未能解决你的问题,请参考以下文章
javascript 中的 return false 和 event.preventDefault 有啥不同? [复制]
JavaScript return false 不会阻止其他函数执行
JavaScript中function 之return false的理解(实例代码)