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

javascript 中的 return false 和 event.preventDefault 有啥不同? [复制]

JavaScript return false 不会阻止其他函数执行

JavaScript中function 之return false的理解(实例代码)

javascript中的事件处理函数中的return false/true问题

javascript中的事件处理函数中的return false/true问题