码迷,mamicode.com
首页 > 编程语言 > 详细

ie6 javascript:void(0);

时间:2014-11-04 12:55:52      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:style   http   io   color   ar   使用   java   sp   strong   

遇到过几次这种问题,现在总结一下。

代码:

<a onclick="window.location.href=‘http://www.google.com‘" href="javascript:void(0);">google</a>
这段代码在主流的浏览器里面都没问题,但是在IE6下就会出现不能跳转的现象。

经过一翻排查,发现绑定的事件都会执行,是由于DOM本身的冒泡事件所以会最后执行href属性内的javascript:void(0);导致的。

a标签

a标签本来就是用来进行页面跳转的标签,其运行机制是告诉浏览器URL地址并且跳转。当然,我们可以在href属中直接执行javascript。

代码:

<a href="javascript:alert(‘Hello!‘);">Say Hello</a>
Say Hello


这里由于javascript执行了alert函数,但是其返回的是null。所以a标签没有执行任何动作。

javascript:void(0);

void(arg);可以理解为永远返回null的函数,但是其参数不能为空。其参数可以为任意的表达式甚至是函数。

代码:

<a href="javascript:void(name = ‘will‘); alert(‘Hello ‘ + name);">Say Hello</a>
Say Hello


对IE6运行的猜想

IE6会先运行DOM本身绑定的事件,如onclick;如果没有阻止冒泡,则会顺序执行href属性。而void(0);正是不需要执行任何事件,则IE6告诉浏览器不执行任何事件(覆盖之前的动作),并且终止冒泡相当于return false;于是浏览器没有执行任何动作。

这样只要在onclick事件内阻止冒泡事件即可。

经过改进的代码为:

<a onclick="window.location.href=‘http://www.google.com‘ return false;" href="javascript:void(0);">google</a>
这样在IE6下就可以正常运行了。

其他方法

当然可以不使用javascript:void(0);而改使用#也可以避免,href属性内的#本来的意思就是锚点#name所以当不指定任何锚时自然会到页面顶端并在URL后加入Hash symbol。

这里对于锚还有一个比较特殊的用法

当href属性的值是锚点时,但是又找不到该锚点,则相当于返回null,所以可以使用##来代替javascript:void(0);

当然前提是你的页面不要有锚点的名字是#的哟~
 
### 和## 有什么区别?
按href属性的#解释,##应该是去寻找<a name=‘#‘></a>的锚点,###应该是去寻找<a name=‘##‘></a>的锚点,但是name属性应该是以[A-Za-z]字母开头并且具有唯一性的标识。所以这应该仅仅只是一种hack写法,应该没什么区别。以上是我的理解 :)

ie6 javascript:void(0);

标签:style   http   io   color   ar   使用   java   sp   strong   

原文地址:http://www.cnblogs.com/svennee/p/4073128.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!