addEventListener attachEvent和解决IE 6 7 8 this指向错误

来源:互联网 发布:天天卡牌淘宝杂货铺 编辑:程序博客网 时间:2024/06/05 08:05

标准浏览器中可以使用addEventListener()函数来给DOM元素绑定事件,使用removeEventListener()函数移除事件绑定,而IE6-8不支持这两个函数,只能使用attachEvent()和detachEventListener()。

addEventListener()和attachEvent()的区别主要有以下几点:

  • addEventListener(type,handler,capture)有三个参数,其中type是事件名称,如click,handler是事件处理函数,capture是否使用捕获,是一个布尔值,一般为false,这是默认值,所以第三个参数可以不写。
  • attachEvent(type,handler)有两个参数,其中type是事件名称,如onclick,handler是事件处理函数,IE6-8不支持事件捕获的,只支持事件冒泡。
  • 如果一个事件在绑定以后有解除绑定的需要,可以使用removeEventListener(),参数和addEventListener()一样,IE6-8使用detachEvent()函数,参数和attachEvent()一样。
  • 在IE6-8浏览器中,使用了attachEvent或detachEvent后事件处事函数里面的this指向window对象,而不是事件对象元素。
  • addEventListener绑定的事件是先绑定先执行,attachEvent绑定的事件是先绑定后执行

解决IE6-8 attchEvent this指向window的方法:

1.使用事件处理函数.apply(事件对象,arguments),代码如下:

<a id="link">点击</a><script type="text/javascript">    var object=document.getElementById('link');    function handler(){        alert(this.innerHTML);    }    object.attachEvent('onclick',function(){          handler.call(object,arguments);    });</script>

这种方式的缺点是绑定的事件无法取消绑定,原因上面已经说了,匿名函数和匿名函数之间是互不相等的。

2.使用事件源代替this关键字

<a id="link">点击</a><script type="text/javascript">    function handler(e){        e=e||window.event;        var _this=e.srcElement||e.target;        alert(_this.innerHTML);    }    var object=document.getElementById('link');    object.attachEvent('onclick',handler);</script>
0 0