在IE对GIF动画的一个BUG中,提到了由于onbeforeunload事件形成浏览器进行中的请求被挂断的问题,这篇算是一个扩展。javascript
在网页中咱们经常使用<a href="javascript:void(0);"> ... </a>
(包括其变种如javascript:
等)来作一个“不会跳转”的超连接,而这个a标签一般会长得像一个按钮,或者充当了按钮的功能。前端
先抛开BUG不说,从语义上讲,a标签来作按钮是不合适的。但这么作实际上是处于历史缘由:在IE6或更古董的浏览器中,:hover
等普遍应用的伪类只对a标签生效。悬浮态、点击态对于按钮来讲是很是重要的,但若是用JS来实现这事就有点蛋B,杀鸡用牛刀了,因而为了图便宜,你们都采用a加上各类样式来充当按钮功能。java
时间一长,按钮的点击不少不会是页面跳转了,而是页面内交互。这时候问题来了:a标签一点击,页面跳走了,没得玩儿了。因而强需求“不会跳转的a标签”,使用事件机制阻止浏览器默认行为固然是很好的,可是毕竟要手工操做,容易漏,再加上前端捉襟见肘的代码量,彷佛这种正经方法不怎么遭人待见。浏览器
结果容易的方法固然仍是被人找出来了,起先是onclick="return false;"
,没啥问题,可咱不是不提倡写内联事件绑定么?因而有了href="#"
,时间一长,发现hash是颇有用的,好比能够用来作历史记录,固然还有它原本的页面定位的做用,并且这容易形成页面跳到最顶上去,因而这样的a标签虽然不会跳转页面,但实际上是有破坏性的。后来不知道是谁发明了本文的猪脚:javascript:void(0);
可谓惊为天人,后续为了省几个字符所扩展的都算不上啥,因为其较小的破坏性和很是便捷的用法,一度成为比较公认的最佳实践。动画
基本上来讲这没太大问题,缺点就是由于javascript:
这个protocol
是会触发onbeforeunload事件,从而引起一连串没必要要的麻烦。 那么,哪里才能买获得呢怎么才是真正的最佳实践呢?.net
我以为有三种选择:代理
2麻烦 3可能受阻止冒泡的影响 教练,我想选1code