我们的网络应用程序完全在浏览器上呈现。
服务器只通过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是坏的,因为这是由模板引擎生成的:)
答案 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,它将在单击时重新加载页面。