为什么在href中使用`javascript:void(0)`而不是`javascript:`作为空链接占位符?

17
我看到过 href="javascript:void(0)"href="javascript:;",是否有任何理由我不直接使用 href="javascript:" 呢? 编辑: 让我明确一点:我将它与 onclick 结合使用,并且如果需要使用另一种方式,我不反对使用 return false。当然,只有在另一种方式比 javascript: 更合理时才这样做。 此外,我还没有看到我的问题在第一段中得到回答(我认为很清楚)。谢谢,David。

你有多经常看到只有 http: 的 URL 呢?我猜测这是因为标准规定当协议或 href 类型被声明时,你需要在其后面加上一些内容! :-) - Platinum Azure
3
好的,我会尽力进行翻译,不会改变原意,并简化语言,以下是需要翻译的内容:https://dev59.com/YHVC5IYBdhLWcg3w9GLM - 相关主题可能会有所帮助。 - Bakudan
参见:https://dev59.com/RnA65IYBdhLWcg3wuhIR - Pang
4个回答

18

个人建议避免使用两者,而是使用onclick='return false;',并将href='#'设置好。

为什么?因为如果在 href 中放置 Javascript 代码,则当您将鼠标悬停在链接上时,它会像任何其他 URL 一样出现在浏览器的状态栏中。这看起来很混乱。

实际上,由于它无论如何都将被忽略,您可以将任何 URL 放入href中,而不仅仅是一个散列符号。散列符号是最安全的选择,以防用户禁用了Javascript,但除此之外,它可能是任何东西。

但我必须指出:将 <a> 标签的 href 设为无效的 Javascript 代码似乎有点背离使用 <a> 标签的初衷。我可以理解您想在运行时启用和禁用链接,但仅将 href 设置为空似乎有点毫无意义。如果它不是一个真正的链接,为什么不只使用 <span> 或其他标记。如果您必须使其看起来像链接,在 CSS 方面很容易实现。


8
井号符号(#)的意义在于作为锚点使用,而不是用于其他目的。如果你这样使用它,例如页面跳来跳去,有时会产生不良效果。请尽量避免这种用法。 - RubyFanatic
1
@RubyFanatic - 说实话,井号符号是锚点链接,但我接受你的观点。不过我不同意;只要启用了JavaScript,就不会出现不良影响,即使出现了问题,跳转到当前页面顶部也很少会造成灾难。此外,井号符号现在已经完全被用于Ajax功能,甚至被推荐为良好的实践方法,因此这样做几乎不会违反潮流。 - Spudley
只是回答你的问题:我不使用span,因为它无法与键盘配合使用,也无法自动在CSS上获得蓝色/下划线/指针。 - 700 Software
1
实际上,如果您在span上使用了tabindex="0",那么它将对:focus事件做出反应。我已经在IE 7、8和其他较新的浏览器中尝试过这个例子:http://jsfiddle.net/vptB3/1/(无论如何,IE都不支持:focus)。 - Tokimon

16

这并不能回答你的问题,但或许可以更加清晰地解释一下。早期版本的浏览器(如Netscape)存在一个问题,当脚本在href中使用时会导致问题。

void运算符几乎是唯一可以强制点击什么都不发生的方法。

现在,由于浏览器已经正确实现了"伪协议",因此您可以安全地使用javascript:;


4
为什么不使用 javascript: 而是 javascript:; - dhblah
我发现在HTAs(IE7模式)中,href="javascript;;"会在新窗口中打开。 - Marc

2
理想的情况是不要将任何代码放在元素本身上,而是使用 script 标签或外部文件中的 JavaScript,并在那里绑定事件处理程序。

是的。在超链接上绑定Javascript事件可以产生最易于阅读的代码,并且未来易于维护。 - RubyFanatic

1
最好都不要使用。href 属性表示 URL,更好的方法是使用事件处理程序来获取所需的行为,可能是 onclick 事件。
在这种情况下,所需的行为显然是什么也不做。首先,当它不链接任何地方时,为什么要使用锚标签?其次,这可以通过防止事件冒泡来处理,让 onclick 事件处理程序返回 false。然后,href 可以指向 #,或者更好的是将其指向一个 URL,该 URL 或多或少具有与事件处理程序相同的效果,因此在关闭 JavaScript 时会优雅降级。

如果JavaScript被关闭,页面顶部将会出现一个大红色的“noscript”警告。此外,我不认为在状态栏中显示URL而不是“javascript”更好。 - 700 Software
1
更正:JavaScript中的“word” - 700 Software
4
我很佩服您五个月后回来纠正一个错别字。+1 - n0nag0n
当您需要将锚点样式应用于某些“不链接任何地方”,但执行Javascript脚本的内容时,该怎么办?您不希望该脚本出现在浏览器的状态栏中。 - andreszs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接