将"return false"添加到click事件侦听器的效果是什么?

Leo*_*nel 348 html javascript

很多时候我在HTML页面中看到过像这样的链接:

<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>
Run Code Online (Sandbox Code Playgroud)

return false那里有什么影响?

而且,我通常不会在按钮中看到它.

这是指定的吗?在w3.org的某些规范中?

Jim*_*Jim 304

事件处理程序的返回值确定是否也应该发生默认浏览器行为.在单击链接的情况下,这将在链接之后,但在表单提交处理程序中最明显的区别是,如果用户输入信息时出错,您可以取消表单提交.

我不相信有W3C规范.像这样的所有古老的JavaScript接口都被赋予了昵称"DOM 0",并且大部分未指定.你可能会有一些运气阅读旧的Netscape 2文档.

实现此效果的现代方法是调用event.preventDefault(),这在DOM 2 Events规范中指定.

  • `event.preventDefault?event.preventDefault():event.returnValue = false;`也可以在IE中使用 (41认同)
  • 除Chrome之外的每个浏览器都使用`return false`方法,但我需要Chrome的`event.preventDefault`. (3认同)
  • Chrome现在使用`return false`方法.它停止跟踪img元素的onclick事件中的链接. (3认同)
  • “我不相信有这方面的 W3C 规范”[实际上,有](https://html.spec.whatwg.org/multipage/webappapis.html#the-event-handler-processing-algorithm) (请参阅步骤 5 -&gt; _否则_) (3认同)

Hob*_*Ben 160

您可以通过以下示例看到差异:

<a href="http://www.google.co.uk/" onclick="return (confirm('Follow this link?'))">Google</a>
Run Code Online (Sandbox Code Playgroud)

单击"Okay"返回true,然后链接.单击"取消"将返回false并且不会跟随该链接.如果禁用了javascript,则会正常关注链接.

  • 正是我想要的,在提交按钮上工作也很完美!`<button type ="submit"onclick ="return confirm('你真的要删除吗?');">删除</ button>` (7认同)

Her*_*ill 27

这是一个更强大的例程来取消所有浏览器中的默认行为和事件冒泡:

// Prevents event bubble up or any usage after this is called.
eventCancel = function (e)
{
    if (!e)
        if (window.event) e = window.event;
    else return;
    if (e.cancelBubble != null) e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
    if (e.preventDefault) e.preventDefault();
    if (window.event) e.returnValue = false;
    if (e.cancel != null) e.cancel = true;
}
Run Code Online (Sandbox Code Playgroud)

如何在事件处理程序中使用它的示例:

// Handles the click event for each tab
Tabstrip.tabstripLinkElement_click = function (evt, context) 
{
    // Find the tabStrip element (we know it's the parent element of this link)
    var tabstripElement = this.parentNode;
    Tabstrip.showTabByLink(tabstripElement, this);
    return eventCancel(evt);
}
Run Code Online (Sandbox Code Playgroud)

  • 第一个代码块有一个尾随的"else".糟糕的编码风格.添加一些花括号,所以它不含糊. (7认同)

kam*_*esh 21

什么"回归虚假"真的在做什么?

return false实际上是在调用它时执行三个非常独立的事情:

  1. event.preventDefault();
  2. event.stopPropagation();
  3. 停止回调执行并在调用时立即返回.

有关更多信息,请参阅jquery-events-stop-misusing-return-false.

例如 :

单击此链接时,return false将取消浏览器的默认行为.

<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>
Run Code Online (Sandbox Code Playgroud)

  • onclick ="return false"与*jQuery点击事件处理程序返回false相同.浏览器仅阻止默认处理程序(例如`e.preventDefault()`)但不停止传播.请参阅:http://jsfiddle.net/18yq1783/ (7认同)

Nea*_*all 15

从JavaScript事件中重新调整false通常会取消"默认"行为 - 在链接的情况下,它会告诉浏览器不遵循该链接.

  • "平常"?所以不总是? (5认同)

Guv*_*nte 12

我相信这会导致标准事件不会发生.

在您的示例中,浏览器不会尝试转到#.


Hob*_*Ben 12

返回false将在javascript运行后停止跟踪超链接.这对于优雅降级的不显眼的javascript非常有用 - 例如,您可以使用缩略图来使用javascript打开全尺寸图像的弹出窗口.当关闭javascript或中间单击图像(在新选项卡中打开)时,这将忽略onClick事件,并且通常只将图像打开为完整大小的图像.

如果未指定return false,则图像将启动弹出窗口并正常打开图像.有些人而不是使用return false使用javascript作为href属性,但这意味着当禁用javascript时,链接将不执行任何操作.


pix*_*xel 7

在onclick事件中使用return false会阻止浏览器处理执行堆栈的其余部分,其中包括跟随href属性中的链接.

换句话说,添加return false会阻止href工作.在您的示例中,这正是您想要的.

在按钮中,没有必要,因为onclick是它将要执行的全部 - 没有href要处理和转到.


ste*_*yer 5

返回false表示不采取默认操作,如果是,<a href>则默认操作是跟随链接。当您向onclick返回false时,href将被忽略。