linchao 发表于 2013-1-4 02:48:43

JS: addEventListener 和 attachEvent 绑定的函数中this的区别

<div id="cnblogs_post_body">  写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前者是Firefox chrome,后者只是存在于IE系列中。
  最近在写一个事件代理的时候,遇到一个BUG,发现除此外,二者绑定的执行函数中的 this 是不相同的,addEventListener 和 attachEvent函数在运行时候的上下文是不相同的。

用了一个简单的demo来描述这个不同点:
<div class="cnblogs_code"><html xmlns="http://www.w3.org/1999/xhtml"><<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" />    <<title>测试</title></head><<body><div id="div1">    <a href="#" id="a1">test1</a></div><<div id="div2">    <a href="#" id="a2">test2</a></div></body><<script type="text/javascript">    var testGolb = "diff"; //定义一个全局变量    var a1 = document.getElementById( "a1");    var a2 = document.getElementById( "a2");    function getEleId ( e) {      // body...      alert( this.id);      alert( this.testGolb);    }                                          a1.onclick = getEleId;                     if( a2.attachEvent){      a2.attachEvent( "onclick", getEleId);    }else{      a2.addEventListener( 'click',getEleId);    }</script></html>
页: [1]
查看完整版本: JS: addEventListener 和 attachEvent 绑定的函数中this的区别