向点击事件监听器添加"返回假"有什么作用?

时间:2020-03-06 14:40:49  来源:igfitidea点击:

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

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

那里的" return false"有什么作用?

另外,我通常不会在按钮中看到它。

在任何地方都指定了吗?在w3.org的某些规格中?

解决方案

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

在示例中,浏览器将不会尝试转到#。

从JavaScript事件中将false调整为false通常会取消链接的"默认"行为,它告诉浏览器不要遵循该链接。

返回false将阻止导航。否则,该位置将成为someFunc的返回值

返回false表示不采取默认操作,在&lt;a href>的情况下,将遵循该链接。当我们向onclick返回false时,href将被忽略。

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

换句话说,添加return false会使href停止工作。在示例中,这正是我们想要的。

在按钮中,这是没有必要的,因为onclick就是它将执行的全部内容-无需处理和转到href。

浏览器黑客:
http://jszen.blogspot.com/2007/03/return-false-to-prevent-jumping.html

在JavaScript运行后,返回false将停止遵循超链接。这对于不雅观的javascript正常降级很有用,例如,我们可能拥有使用javascript打开全尺寸图像弹出窗口的缩略图。当关闭javascript或者单击鼠标中键(在新选项卡中打开)时,此操作将忽略onClick事件,而通常将其作为全尺寸图像打开。

如果未指定return false,则图像将同时启动弹出窗口并正常打开图像。某些人不是使用return false而是将javascript用作href属性,但这意味着禁用javascript时,链接将无效。

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

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

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

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

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

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

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

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