href =“javascript:”vs. href =“javascript:void(0)”

时间:2010-09-08 10:18:19

标签: javascript

我们的网络应用程序完全在浏览器上呈现。
服务器只通过JSON消息传递与浏览器通信。

因此,我们只需要针对该应用的单个页面,并且大多数<a>个代码都没有指向其他网页的真实href

在我寻求删除不必要的东西的过程中,我想知道我是否可以摆脱代码中void(0)的数量,因为它们似乎毫无用处:

<a onclick="fn()">Does not appear as a link, because there's no href</a>
<a href="javascript:void(0)" onclick="fn()">fn is called</a>
<a href="javascript:" onclick="fn()">fn is called too!</a>

是否有人知道使用href="javascript:"是否会导致问题?
它甚至可以在IE7上运行......

请不要花费宝贵的时间告诉我内联javascript是坏的,因为这是由模板引擎生成的:)

8 个答案:

答案 0 :(得分:37)

它不会导致问题,但与PreventDefault

相同是一种技巧

当你在页面中停下来并且锚点为:

<a href="#" onclick="fn()">click here</a>

您将跳转到顶部,并且网址也会包含锚#,为避免这种情况,我们只需return false;或使用javascript:void(0);

关于你的例子

<a onclick="fn()">Does not appear as a link, because there's no href</a>

只需执行a {text-decoration:underline;}即可获得“链接类似”

<a href="javascript:void(0)" onclick="fn()">fn is called</a>
<a href="javascript:" onclick="fn()">fn is called too!</a>

没关系,但最后在你的function,只有return false;来阻止默认行为,你不需要再做任何事了。

答案 1 :(得分:23)

在导航中使用javascript:时,执行脚本的返回值(如果有)将成为浏览器中显示的新文档的内容。 JavaScript中的void运算符会导致其后面的表达式的返回值返回 undefined ,从而阻止此操作发生。您可以自己尝试,将以下内容复制到地址栏并按返回:

javascript:"hello"

结果是一个只有单词“hello”的新页面。现在将其更改为:

javascript:void "hello"

......没有任何反应。

当您自己编写javascript:时,没有执行脚本,因此该脚本执行的结果也是 undefined ,因此浏览器什么都不做。这使得以下或多或少相同:

javascript:undefined;
javascript:void 0;
javascript:

除了可以通过声明具有相同名称的变量来覆盖 undefined 之外。 void 0的使用通常毫无意义,它基本上是从void functionThatReturnsSomething()缩小的。

正如其他人所提到的,最好在点击处理程序中使用return false;而不是使用javascript:协议。

答案 2 :(得分:12)

使用&#39; javascript:void 0&#39;会在IE中引起问题

当您点击该链接时,会触发 onbeforeunload 窗口事件!

<!doctype html>
<html>
<head>
</head>
<body>
<a href="javascript:void(0);" >Click me!</a>
<script>
window.onbeforeunload = function() {
    alert( 'oops!' );
};
</script>
</body>
</html>

答案 3 :(得分:5)

如果使用jQuery事件设置onclick,则此方法在所有浏览器中都可以正常使用:

<a href="javascript:;">Click me!</a>

如前所述,href =“#”改变了url hash,如果你使用History(或ba-bbq)JS插件,可以触发数据重新加载。

答案 4 :(得分:3)

你可以将它们全部#组成。

然后,您需要将return false;添加到任何调用锚点的函数的末尾,以使页面不会跳到顶部。

答案 5 :(得分:1)

我通常不使用任何href并用css改变方面,使它们看起来像链接。因此,除了应用程序的事件处理程序之外,您根本不必担心链接效果

a {
  text-recoration: underline;
  cursor: pointer;
}

答案 6 :(得分:0)

为什么所有点击事件都以a href链接?

如果您使用span代码:hover CSS以及相应的onclick事件,那么这将彻底解决问题。

答案 7 :(得分:0)

javascript:void(0); ->这将执行void函数并返回undefined。 IE可能有问题。 javascript :; ->这什么也没做。最安全地创建死链接。 '#'->这意味着指向相同的DOM,它将在单击时重新加载页面。

相关问题