为啥使用 `javascript:void(0)` 而不是 `javascript:` 作为 href 不做占位符? [复制]

Posted

技术标签:

【中文标题】为啥使用 `javascript:void(0)` 而不是 `javascript:` 作为 href 不做占位符? [复制]【英文标题】:Why use `javascript:void(0)` instead of `javascript:` as an href do nothing placeholder? [duplicate]为什么使用 `javascript:void(0)` 而不是 `javascript:` 作为 href 不做占位符? [复制] 【发布时间】:2011-07-11 08:40:43 【问题描述】:

我见过href="javascript:void(0)"href="javascript:;" 我有什么理由不直接使用href="javascript:" 吗?

编辑:让我明确一点:我将它与onclick 结合使用,并且如果有必要使用替代方案,我不反对使用return false。当然,这只是在替代方案比javascript: 更有意义的情况下。

另外,我还没有看到第一段中显示的(显然我认为)我的问题的答案。谢谢,大卫。 :)

我见过href="javascript:void(0)"href="javascript:;" 我有什么理由不直接使用href="javascript:" 代替吗?

【问题讨论】:

您多久会看到仅包含http: 的网址?我怀疑这是因为标准要求在宣布协议或 href 类型时,您需要在其后添加一些内容! :-) ***.com/questions/134845/… - 关于相同的主题,可能会有所帮助 另见:***.com/questions/3666683/… 【参考方案1】:

我个人会避免使用任何一种。我会改用onclick='return false;',然后设置href='#'

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

事实上,因为无论如何它都会被忽略,所以您可以将任何您喜欢的 URL 放入href,而不仅仅是一个哈希。哈希是最安全的,以防万一您的用户禁用了 Javascript,但除此之外,它可以是任何东西。

但我必须指出:有一个带有 href 的 <a> 标记会指向一个无效的 Javascript 代码,这似乎完全违背了首先拥有一个 <a> 标记的意义​​。我可以看到您希望如何在运行时启用和禁用链接,但简单地将 href 设置为 void 似乎有点毫无意义。如果它不是一个真正的链接,为什么不只是有一个<span> 或其他一些标签。如果你必须让它看起来像一个链接,那么在 CSS 中做到这一点很简单。

【讨论】:

井号是用作锚点,而不是用于此目的。使用这种方式时不时会产生不良影响,比如页面乱跳。 @RubyFanatic - 有点迂腐,井号是 到锚点的链接,但我接受你的观点。不过我不同意;只要启用了Javacript,就不会产生不良影响,而且即使启用,跳到当前页面顶部也很少是灾难。此外,哈希符号现在已完全被用于 Ajax 功能,以至于它实际上被推荐为良好的做法,因此这样做几乎不会违反规定。 只是为了回答您的问题:我不使用 span,因为它不适用于键盘并且不会自动在 CSS 上获得蓝色/下划线/指针。 其实很好。如果您的跨度上有一个tabindex="0",那么它将对 :focus 事件作出反应。我已经在 IE 7、8 和其他较新的浏览器中尝试过这个示例:jsfiddle.net/vptB3/1(IE 不支持 :focus)【参考方案2】:

不回答你的问题,但可能会更清楚一点,一些早期版本的浏览器(如 netscape)在href 中使用脚本时会出现问题。

void 运算符几乎只能强制点击什么都不做。

现在,随着浏览器正确实现“伪 URL”,您可以安全地使用 javascript:;

【讨论】:

javascript:; 为什么不javascript: 我看到 HTA(IE7 模式)在新窗口中打开 href="javascript;;"【参考方案3】:

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

【讨论】:

是的。超链接上的 Javascript 事件绑定应该生成最易读的代码,并且易于维护。【参考方案4】:

最好不要使用。 href 属性表示一个 url。最好使用事件处理程序来获得所需的行为,这可能是onclick 事件。

在这种情况下,期望的行为显然是什么都不做。首先,当锚标签没有链接到任何地方时,为什么还要使用它呢?其次,这可以通过防止事件冒泡来处理,方法是让onclick 事件处理程序返回false。然后href 可以指向#,或者更好的是让它指向一个与事件处理程序或多或少具有相同效果的url,因此当javascript 关闭时它会优雅地降级。

【讨论】:

如果 JavaScript 被关闭,顶部会出现一个大红色 noscript 警告。另外,我看不出状态栏有一个 URL 而不是工作 javascript 有什么好处。 更正:"word" JavaScript @GeorgeBailey 很高兴你 5 个月后回来纠正错字。 +1

以上是关于为啥使用 `javascript:void(0)` 而不是 `javascript:` 作为 href 不做占位符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

javascript:;与 javascript:void(0);

JavaScript-Runoob:Javascript:void含义

详解javascript: void;

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

为什么要使用href=”javascript:void;”

javascript:void 含义代码规范