href="javascript:;" 和 href="javascript:void(0)" 有什么区别?

4
我了解到关于 href="#"href="javascript:void(0)" 的比较, 我也想了解关于 href="javascript:;"href="javascript:void(0)" 的比较。
PS:我一直使用 href="javascript:;" 而不是 href="javascript:void(0)",没有遇到任何问题。

9
两种都是不好的做法,应该避免使用;你不必要地在URL栏中评估JavaScript,而这种方法并不被所有浏览器支持。应该使用href="#"并使用事件处理程序拦截点击事件。 - user229044
4个回答

3

在超链接中使用javascript:是不好的。你的JavaScript设计应该是低调的。

如果你要为你的锚点附加事件监听器,应该使用#锚点或实际的URL,例如:

<a href="/delete/post/123">delete</a>
...
<script>
jQuery(function($) {
     $('a').on('click', function(event) {
         event.preventDefault();
         // do ajax stuff
     });
});
</script>

这样,旧版浏览器(或禁用JavaScript的浏览器)将通过普通链接删除项目,而启用JavaScript的浏览器将通过AJAX进行操作,以避免页面刷新。
如果你的链接真的没有任何作用,你根本不应该使用锚点;可以为此目的仅样式化一个

这个意思是有道理的,但仍然需要付出一些代价:所有空链接都将具有一个类或其他标记作为空链接。 - ZHAO Xudong

0

href 中放置的内容并不是很重要。你应该首先通过在点击处理程序中返回 false 来阻止链接被跟踪。

例如:

<a href="fallback.html" onclick="doSomething();return false;">

href 中,您可以放置一个链接,用于为禁用 Javascript 的用户提供备选解决方案,或者是一个页面,告知他们需要启用 Javascript 才能使用该页面的功能。

为什么要点踩?如果你不解释哪里有问题,那么回答就无法得到改进。 - Guffa

0

javascript:链接的通常行为是用表达式的结果替换文档主体,除非它的结果是undefined。你的两个版本没有区别,它们都评估为undefined,在javascript:链接中没有任何效果。

然而,这不是制作无操作链接的首选方式。你需要让浏览器不必要地解析和评估JavaScript。如果你想创建一个什么也不做的链接,应该将其href设置为"#",并将函数绑定到链接的click事件上。你的事件处理程序将被传递一个事件对象;如果你想评估一些代码,然后防止链接被跟踪(将#附加到当前URL),那么你可以使用event.preventDefault()event.stopPropagation()或从你的事件处理程序中简单地返回false

在所有选项中,最好的选择是在您的href属性中保持一些有意义的值,这样如果JavaScript被规避(例如用户在新窗口中打开链接),仍然有一些合理的备选方案。然后,您应该在现有的仅HTML功能之上添加其他“丰富”的操作。

2
一个带有 href="#" 的链接什么也不做,它会跳转到空书签,即页面顶部。这太烦人了。 - Guffa
2
@Guffa,正如我所说,您应该拦截点击事件。如果您想要一个实际上什么都不做的“链接”,那么您不需要链接。您需要一个cursor:pointer应用于其上的div。实际上什么都不做的链接在实践中没有用处。 - user229044
@meagar 当处理文本时,更适合使用 span 而不是 div - Appleshell
1
IE6不支持span:hover,这就是为什么span无法承担a的角色。不幸的是,像我这样的人必须支持IE6。 - ZHAO Xudong
@ZHAOXudong 那你应该使用span:hover,而ie6用户在悬停时不应该得到指针光标。没什么大不了的。 - user229044

0

javascript:void(0) - 比 javascript:some_code_to_execute 更易于理解。当然,在您的情况下,javascript:; 不难阅读,但是人们不会认为代码已经损坏。

有几个原因说明使用 javascript: 处理点击事件是不好的。我知道这不是实际问题,但它与之相关:

  1. 这种方法已经过时了,虽然浏览器供应商仍然支持它,但它不符合 wc3 标准。
  2. 链接 href="javascript" 将无法为没有启用 JavaScript 的用户工作。最好使用 href="/somePage.com?id=123" onclick="makeActionFor(777); return false">
  3. 标记和代码之间没有分离。在这种情况下,将 onclick 放在上一个示例中也是一种不好的附加点击处理程序的方式。

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