将“return false”添加到单击事件侦听器有什么影响?

IT技术 javascript html
2021-01-10 08:03:58

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

<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>

里面的作用是什么return false

此外,我通常不会在按钮中看到这一点。

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

6个回答

事件处理程序的返回值决定了默认浏览器行为是否也应该发生。在点击链接的情况下,这将跟随链接,但在表单提交处理程序中差异最为明显,如果用户输入信息有误,您可以取消表单提交。

我不相信有 W3C 规范。像这样的所有古老的 JavaScript 接口都被赋予了“DOM 0”的绰号,而且大多是未指定的。您可能有幸阅读旧的 Netscape 2 文档。

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

event.preventDefault ? event.preventDefault() : event.returnValue = false; 也适用于 IE
2021-03-15 08:03:58
在普通的 JS 表单提交处理程序中返回 false 不起作用(至少在 Chrome 中)所以我使用 e.preventDefault()。根据@ 2astalavista 上面的评论,e.preventDefault 在 IE 中失败,所以使用他的方法: event.preventDefault ?event.preventDefault() : event.returnValue = false;
2021-03-15 08:03:58
除了 Chrome 之外的每个浏览器都使用该return false方法,但我需要event.preventDefaultChrome。
2021-03-27 08:03:58
Chromereturn false现在可以使用该方法。它停止跟随 img 元素的 onclick 事件中的链接。
2021-03-28 08:03:58
“我不相信有一个 W3C 规范”实际上,有(参见第 5 步 ->否则
2021-04-05 08:03:58

您可以通过以下示例看到不同之处:

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

单击“确定”返回 true,然后跟随链接。单击“取消”返回 false 并且不遵循链接。如果 javascript 被禁用,则链接正常。

正是我要找的,在提交按钮上也很完美! <button type="submit" onclick="return confirm('Do you really want to delete this?');">Delete</button>
2021-03-22 08:03:58

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

// 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;
}

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

// 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);
}
垫片很好,但实际优势是什么return false;kamesh 的回答对此进行了一些处理,但是由于您的 shim 有可能会做一个或另一个,那么这些单独的结果将如何在tabstripLinkElement_click浏览器之间进行更改操作?如果没有操作差异,为什么(在实践中)要麻烦(即使从理论上讲,这是正确的做法)?谢谢,还有 AIA 的僵尸回答问题。
2021-03-24 08:03:58
第一个代码块有一个尾随else. 可怕的编码风格。添加一些花括号,这样就不会产生歧义。
2021-03-25 08:03:58
@DonaldDuck 你确定那个空格吗?如果我尝试if (false) if (true) console.log('true'); else console.log('false1');我得到undefined,不是false1如果我添加另一行:if (false) if (true) console.log('true'); else console.log('false1'); else console.log('false2');我得到false2. 也就是说,else inelse return属于if (window.event)我认为。
2021-04-02 08:03:58

什么“返回假”真的在做什么?

当你调用它时,return false 实际上是在做三件非常独立的事情:

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

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

例如 :

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

<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>
这是至少目前有效的博客文章的链接
2021-03-20 08:03:58
Fwiw,该博客的链接已损坏 atm。一个档案就在这里
2021-03-22 08:03:58
的onclick =“返回假”是一样的,从一个jQuery click事件处理程序返回false。浏览器仅阻止默认处理程序(例如e.preventDefault()),但不会停止传播。参见:jsfiddle.net/18yq1783
2021-04-03 08:03:58

从 JavaScript 事件重新调整 false 通常会取消“默认”行为 - 在链接的情况下,它告诉浏览器不要跟随链接。

“通常”?所以不总是?
2021-03-19 08:03:58