一尘不染

JavaScript 链接使用哪个“href”值,“#”还是“javascript:void(0)”?

javascript

以下是构建链接的两种方法,其唯一目的是运行 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>

阅读 170

收藏
2022-01-10

共2个答案

一尘不染

我用javascript:void(0).

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

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

但是后来他们忘记return doSomething()在 onclick 中使用,而只是使用doSomething().

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

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

onclick="someFunc.call(this)"

或者

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

使用javascript:void(0)可以避免上述所有问题,而且我还没有发现任何不利的例子。

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

使用href="#",确保onclick始终包含return false;在最后,任何被调用的函数都不会抛出错误,并且如果您将函数动态附加到onclick属性,请确保它不会抛出错误并返回false

或者

利用 href="javascript:void(0)"

第二个显然更容易沟通。

2022-01-10
一尘不染

两者都不。

如果您可以拥有一个有意义的实际 URL,请将其用作 HREF。如果有人中键单击您的链接以打开新选项卡,或者他们禁用了 JavaScript,则 onclick 不会触发。

如果这是不可能的,那么您至少应该使用 JavaScript 和适当的点击事件处理程序将锚标记注入到文档中。

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

2022-01-10