我在HTML页面中见过很多这样的链接:

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

这里return false的效果是什么?

而且,我通常不会在按钮中看到这种情况。

这在任何地方都指定了吗?在w3.org的一些规范中?


当前回答

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

在你的例子中,浏览器不会尝试转到#。

其他回答

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

返回false将在javascript运行后停止跟踪超链接。这对于优雅地降级的不引人注目的javascript非常有用——例如,你可以有一个缩略图,使用javascript打开一个全尺寸图像的弹出窗口。当javascript被关闭或图像被中间点击(在一个新的选项卡中打开)时,它会忽略onClick事件,只是正常地以完整尺寸的图像打开图像。

如果没有指定return false,图像将正常启动弹出窗口并打开图像。有些人不使用return false,而是使用javascript作为href属性,但这意味着当javascript被禁用时,链接将什么都不做。

默认情况下,当您单击按钮时,无论您输入了什么值,表单都将被发送到服务器。

然而,这种行为在大多数情况下不太合适,因为我们可能想在发送到服务器之前做一些检查。

因此,当侦听器收到“false”时,提交将被取消。基本上,它的目的是在前端做一些检查。

下面是一个更健壮的例程,可以取消所有浏览器中的默认行为和事件冒泡:

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

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

在你的例子中,浏览器不会尝试转到#。