现在的位置: 首页 > 综合 > 正文

比较href=”#” 和href=”javascript:void(0);”

2012年08月30日 ⁄ 综合 ⁄ 共 908字 ⁄ 字号 评论关闭

阻止跳转常见的有下面四种方式:

1. <a href="javascript:;" onclick="action();">link</a> 

2. <a href="javascript:void(0);" onclick="action();">link</a> 

3. <a href="###" onclick="action();">link</a> 

4. <a href="#" onclick="action();return false;">link</a>  

 

事实上这四种方式都可以很正常的工作。

第1和第2中可以归为一类,使用javascript 伪协议,只要什么都不返回,那么浏览器将不会跳转

第3种比较有意思,它使用了一个锚点(跳转到id或name为##的位置),在浏览器中, 如果一个锚点不存在,那么也不会跳转

第4种是在执行onclick的最后处加上return false, 这样就阻止了浏览器执行默认行为,同样就阻止了跳转

 

我以往的经验都证明第4种是最稳妥的方式,因为第2种都会在ie6下出现bug:

当A被点击, action() 函数里如果有设置location,设置img.src,设置iframe.src 行为,从而导致一个新的资源下载时,ie6会中断掉该行为。

 

第三种真的稳妥么,或许我们可以猜测一下锚点的工作方式,

当<a>元素被点击,浏览器发现href="###" ,首先要判断这个href是否需要跳转到别的页面,如果不需要,那么浏览器会将href后面两个##取出来,然后遍历DOM树,找到第一个id(或者name)的值为##的,调用内部方法,使浏览器滚动到相应的位置 ,如果一个匹配的也没有找到,那么浏览器什么也不做。

而这个过程中, 浏览器需要做的事情可能还有

- 启动载入中提示

- 发出跳转提示音(ie6,ie7) 

 

总之,###会导致浏览器执行一系列的默认行为(是否有性能问题?), 包括ie6 7非常讨厌的提示音,而只要我们阻止了默认行为,这一切都不会发生。

 

所以结论是,尽量不要使用href="javascript:;" href="###" ,而统一使用 onclick="return false;" ,这是安全的,也是体验最好的。

抱歉!评论已关闭.