我应该为JavaScript链接使用哪个“href”值,“#”或“javascript:void(0)”?

以下是构建链接的两种方法,该链接的唯一目的是运行JavaScript代码。在功能,页面加载速度,验证目的等方面哪个更好?

function myJsFunc() {
    alert("myJsFunc");
}
<a href="#" onclick="myJsFunc();">Run JavaScript Code</a>

function myJsFunc() {
    alert("myJsFunc");
}
 <a href="javascript:void(0)" onclick="myJsFunc();">Run JavaScript Code</a>

答案 1

我使用.javascript:void(0)

原因有三。鼓励在开发团队中使用 不可避免地会导致一些人使用函数的返回值,如下所示:#

function doSomething() {
    //Some code
    return false;
}

但是,然后他们忘记了在onclick中使用,而只是使用。return doSomething()doSomething()

避免的第二个原因是,如果被调用的函数引发错误,则最终函数将不会执行。因此,开发人员还必须记住在调用的函数中适当地处理任何错误。#return false;

第三个原因是,在某些情况下,事件属性是动态分配的。我更喜欢能够调用函数或动态分配它,而不必专门为一种或另一种连接方法编写函数代码。因此,我在HTML标记中的(或任何东西)看起来像这样:onclickonclick

onclick="someFunc.call(this)"

onclick="someFunc.apply(this, arguments)"

使用可以避免上述所有头痛,我没有发现任何缺点的例子。javascript:void(0)

因此,如果你是一个单独的开发人员,那么你显然可以做出自己的选择,但如果你作为一个团队工作,你必须声明:

使用 ,确保始终在末尾包含,任何被调用的函数都不会引发错误,如果将函数动态附加到属性,请确保它不会返回错误。href="#"onclickreturn false;onclickfalse

href="javascript:void(0)"

第二个显然更容易沟通。


答案 2

也不。

如果您可以拥有有意义的实际URL,请使用它作为HREF。如果有人中键点击您的链接以打开新标签页,或者他们禁用了 JavaScript,则 onclick 不会触发。

如果无法做到这一点,则至少应使用 JavaScript 和相应的单击事件处理程序将锚点标记注入到文档中。

我意识到这并不总是可能的,但在我看来,在开发任何公共网站时都应该努力做到这一点。

查看不显眼的JavaScriptProgressive enhancement(都是维基百科)。