我们的网络应用程序完全在浏览器上呈现.
服务器只通过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;为了防止默认行为,你不需要再做任何事了.
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:协议.
小智 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)
如果使用jQuery事件设置onclick,则此方法在所有浏览器中都可以正常使用:
<a href="javascript:;">Click me!</a>
Run Code Online (Sandbox Code Playgroud)
如前所述,href ="#"改变了url hash,如果你使用History(或ba-bbq)JS插件,可以触发数据重新加载.