href ="javascript:"vs. href ="javascript:void(0)"

Mic*_*Mic 60 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>
Run Code Online (Sandbox Code Playgroud)

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

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

bal*_*dre 38

它不会导致问题,但这是一个伎俩 PreventDefault

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

<a href="#" onclick="fn()">click here</a>
Run Code Online (Sandbox Code Playgroud)

你会跳到顶部,URL也会有锚#,为了避免这种情况我们只是简单地return false;使用javascript:void(0);

关于你的例子

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

只是做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>
Run Code Online (Sandbox Code Playgroud)

没关系,但function最后,return false;为了防止默认行为,你不需要再做任何事了.

  • 没有href,链接无法选项卡(并获得焦点),太糟糕了. (2认同)

And*_*y E 23

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

javascript:"hello"
Run Code Online (Sandbox Code Playgroud)

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

javascript:void "hello"
Run Code Online (Sandbox Code Playgroud)

...什么都没发生.

当您javascript:自己编写时,没有执行脚本,因此该脚本执行的结果也是未定义的,因此浏览器不执行任何操作.这使得以下或多或少相同:

javascript:undefined;
javascript:void 0;
javascript:
Run Code Online (Sandbox Code Playgroud)

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

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

  • @Mic:如果您使用 `href="#"`,则需要 `return false;`,否则文档滚动将被重置。当然,如果您在链接中使用“javascript:”,“return false”将阻止该脚本执行,因此从这个意义上说它是无用的。 (2认同)
  • 将事件处理程序附加到具有*href`字段中的*real*URL的锚点的问题是,如果用户以另一种方式激活链接(例如,在锚点聚焦时按下输入,鼠标中键),即使他有Javascript,仍然遵循`href`(当然是预期的行为,但仍然令人讨厌) (2认同)

小智 12

使用'javascript:void 0'会导致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>
Run Code Online (Sandbox Code Playgroud)


Tan*_*guy 5

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

<a href="javascript:;">Click me!</a>
Run Code Online (Sandbox Code Playgroud)

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