HTML超链接的href属性应该使用 #,还是使用 javascript:void(0)?(翻译100%)
发布在stackoverflow 热门 javascript 问答2013年12月9日view:8022
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

问题Href attribute for JavaScript links: “#” or “javascript:void(0)”?

当我们需要为一个超链接绑定 javascript 事件时,通常有 2 中方法。这两种方法那种更好呢?

  • 哪种性能最好?
  • 哪种效率更高?
  • 哪种更优雅?
  • ……

这两种是:

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

或者

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

回答http://stackoverflow.com/a/138233/343194

我使用 javascript:void(0)

有 3 个原因:

在开发组中使用 #,难免会带来一些问题。当我们写一个函数时,一般会有一个返回值,例如:

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

但是他们总会忘记使用 return false,这时如果直接写 doSomething() 就会出现问题。

第二个避免使用 # 的原因是,如果函数中出现了错误,或者抛出了异常,那么 return false; 将不会被执行。因此开发人员必须要妥善的处理函数中的错误。

第三个原因是,在大部分情况下我们需要动态的指定 onclick 的事件处理函数。这时我们就不能保证这个函数不抛出异常。我们一般使用面向对象的多态特性而不需要重复的编写相同或者相似的代码。因此我们的 onclick 应该这么写:

onclick="someFunc.call(this)"

或者

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

在以上三种情况,我使用 javascript:void(0) 还未发现任何问题。

综上所述,如果你是一个单独的开发者,你可以使用任何一种方式,但是如果是你开发小组的一员,你应该有所舍弃。

你可以使用 href="#",你需要确保 onclick 指定的函数总是返回 false 值,而且这个函数不能抛出任何异常。

或者

直接使用 href="javascript:void(0)"

显然,第二个更容易沟通。

评论
发表评论
暂无评论
WRITTEN BY
justjavac(迷渡)
☑辍学生 ☑极客 ☑码农 正在出版「代码之谜」,正在翻译「Javascript Quirks」。 http://justjavac.com
TA的新浪微博
PUBLISHED IN
stackoverflow 热门 javascript 问答

翻译 stackoverflow 上面的热门 javascript 问答。

友情链接 大搜车前端团队博客
我的收藏