解决IE attachEvent绑定的事件中this为window问题
在IE浏览器下使用attachEvent绑定对象的事件时,绑定的事件方法中this对象为window对象,而不是当前的DOM对象。w3c浏览器下的addEventListener对象不存在这种问题。
测试代码如下
<div id="dv">111</div> <script> function Alert(){alert(this.innerHTML)} var dvs=document.getElementById('dv') dv.attachEvent('onclick',Alert);//这样添加事件,this为window对象,所以函数Alter中输出undefined </script>
解决办法
<div id="dv">111</div> <script> function Alert(){alert(this.innerHTML)} var dvs=document.getElementById('dv') dv.attachEvent('onclick',function(){Alert.call(dv)});//通过apply或者call方法更改函数Alert中的上下文,这样Alert中this对象就为div对象了 </script>
如果是多个div,for循环绑定事件时,需要处理一下传递的对象,做个闭包
<div>111</div> <div>222</div> <div>333</div> <script> function Alert(){alert(this.innerHTML)} var dvs=document.getElementsByTagName('div') for(var i=0;i<dvs.length;i++){ dvs[i].attachEvent('onclick',(function(i){return function(){Alert.apply(dvs[i]);}})(i));//需要做闭包,然后通过apply或者call方法更改函数Alert中的上下文,这样Alert中this对象就为当前的div对象了 } </script>
加支付宝好友偷能量挖...
原创文章,转载请注明出处:解决IE attachEvent绑定的事件中this为window问题