什么时候以及为什么要在JavaScript中“返回假”?


Answers:


88

通常,在事件处理程序(如中)中onsubmit,返回false是一种告诉事件实际上未触发的方法。因此,在这种onsubmit情况下,这意味着将不提交表单。


10
如果您要提交无需重新加载页面即可提交的AJAX表单,这特别好-但在没有javascript时,也可以通过提交并重新加载页面来工作。
迪恩·拉瑟2009年

10
返回false实际上是在创建事件处理程序时阻止默认操作的过度手段,并且可能导致脆弱的代码。道格拉斯·尼纳(Douglas Neiner)在此处发布的解释和示例fuelyourcoding.com/jquery-events-stop-misusing-return-false
Marquis Wang

3
使用jQuery,最好将其event.preventDefault()用于此功能。我认为不建议返回false,并且不再总是有效。
onetwopunch 2014年

1
有时return false方法中的是,这会改变什么吗?
Francisco Corrales Morales 2014年

@onetwopunch实际上,当我将其更改为e.preventDefault()时,我的一个功能就基于名称空间触摸事件解决了一个问题。不知道为什么,但是你给了我这个主意。谢谢。
Garavani 2014年

69

我猜想您是指您经常不得不将“返回false”作为事实。您的事件处理程序中的语句,即

<a href="#" onclick="doSomeFunction(); return false;">...

“返回假”;在这种情况下,将停止浏览器跳转到当前位置,如href =“#”所示-而是仅执行doSomeFunction()。当您想要向锚标签添加事件,但又不想浏览器在每次点击时跳到每个锚时,此功能非常有用


3
当然,'href =“#”'是不好的做法,但您的总体观点仍然是:-)
Bobby Jack

4
@ vol7ron:替代方法是真实的URL,对于那些没有javascript的人来说,它是替代方法。否则,他们只会点击链接而没有任何反应。
鲍比·杰克

3
@ vol7ron:当然,要由每个开发人员(或网站所有者)来确定他们要满足多少潜在用户群。但是,在这样的情况下,针对更多人的选择是如此简单,我不明白为什么您不选择它。另外,请记住,这不只是人们明确禁用javascript的原因;可能是:其他人将这个决定强加给他们,下载JS文件的网络问题,JS一行中的错误导致所有失败。另外,如果右键单击->在新选项卡中打开仍然可以正常工作,那将非常不错。
鲍比·杰克

不少于1%的用户。很多人使用NoScript之类的扩展是有原因的。故意关闭javascript等功能。
Sepero 2012年

@ vol7ron另一个要考虑的情况是“ javascript中断”(由于页面上方的语法错误)。使用非js后备广告可以为您提供一些安全网。(由于js语法错误,Google.com之前关闭了将近30分钟!)
Alex Czarto 2014年

28

它用于停止事件传播。您会看到两个元素都带有click事件处理程序(例如)

-----------------------------------
| element1                        |
|   -------------------------     |
|   |element2               |     |
|   -------------------------     |
|                                 |
-----------------------------------

如果单击内部元素(element2),它将在两个元素1和2中触发click事件。这称为“事件冒泡”。如果只想在element2中处理事件,则事件处理程序必须返回false以停止事件传播。

另一个示例是链接onclick处理程序。如果要停止链接表单的工作。您可以添加onclick处理程序并返回false。阻止事件传播到默认处理程序。


9
答案的第一部分是错误的:false从事件处理程序返回将阻止与事件关联的默认操作;您也可以通过调用event.preventDefault()或设置event.returnValue = false(IE)来执行此操作;为了阻止事件冒泡,您必须致电event.stopPropagation()或设置event.cancelBubble = true(IE)
Christoph


12

搜索“ js,何时使用'return false;'”后,我也来到了此页面。在其他搜索结果中,有一个页面,我发现它在Chris Coyier的CSS-Tricks网站上更加有用和直接:之间的区别“回归假;” 和'e.preventDefault();'

他的文章的要旨是:

function(){return false; }

//等于

函数(e){e.preventDefault(); e.stopPropagation(); }

尽管我仍然建议阅读全文。

更新:争论使用return false的优点之后;代替e.preventDefault(); &e.stopPropagation(); 我的一位同事指出,如本文所述,return false也会停止回调执行:jQuery Events:Stop(Mis)使用Return False


经过一些代码测试后,我必须在这里注意到:在jquery中function() { return false; }IS EQUAL TO是相等的function(e) { e.preventDefault(); e.stopPropagation(); },但是在纯js中,它 实际上function() { return false; }是相等的function(e) { e.preventDefault(); }。它不会停止传播。
SkuraZZ '19


3

我认为一个更好的问题是,为什么在评估返回值的布尔值集的情况下,不使用true / false?我的意思是,您可能拥有true / null,true / -1和其他杂项。用Javascript“ falsy”值替代,但是为什么要这么做呢?


1

当您想从锚标记触发javascript代码时,应使用onclick处理程序,而不是javascript:伪协议。在onclick处理程序中运行的javascript代码必须将true或false(或比evalue表示true或false的表达式)返回给标记本身-如果返回true,则将像普通链接一样遵循锚点的HREF。如果返回false,则将忽略HREF。这就是为什么“返回false”;通常包含在onclick处理程序的代码末尾。


1

您可以使用return false来防止发生某些事情。因此,如果您在提交时运行脚本,则返回false将阻止提交工作。


1

当在函数中调用return语句时,该函数的执行将停止。如果指定,给定值将返回给函数调用者。如果省略表达式,则返回undefined。

有关更多信息,请查看的MDN文档页面return



1

另外,这个简短而有趣的链接可以通读 https://www.w3schools.com/jsref/event_preventdefault.asp

定义和用法

preventDefault()方法将取消事件(如果可取消),这意味着将不会发生属于该事件的默认操作。

例如,在以下情况下这可能很有用:

Clicking on a "Submit" button, prevent it from submitting a form
Clicking on a link, prevent the link from following the URL

注意:并非所有事件都可以取消。使用cancelable属性来确定事件是否可取消。

注意:preventDefault()方法不会阻止事件通过DOM进一步传播。使用stopPropagation()方法进行处理。


考虑使用:developer.mozilla.org/zh-CN/docs/Web/API/Event/preventDefault,而不是w3schools。但是答案很坚定。
Bibberty
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.