IE中使用的事件綁定函數與Web標准的不同,而且this指向也不一樣,Web標簽中的this指向與傳統事件綁定中的this一樣,是當前目標,但是IE中事件綁定函數中this指向,通過使用call或apply可以改變this指針的指向。
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>attachEvent 中this指向</title> <script type="text/javascript" src="kingwell.js"></script> <script type="text/javascript"> window.onload = function(){ var test = document.getElementById('test'); test.onclick = function(){ //alert(this);//this指向 h1 } test.attachEvent('onclick',function(){ //alert(this);// this指向window }); test.addEventListener('click',function(){ //alert(this);//this指向 h1 },false); //傳統的綁定跟Web標准中this指向是正確的,都是所綁定的那個對象,但IE的總是指向window,這是錯誤的 //只要稍微調整一個,就可以修正這個錯誤 var Event = {}; Event.addEvent = function(target,eventType,handle){ if(document.addEventListener){ Event.addEvent = function(target,eventType,handle){ target.addEventListener(eventType,handle,false); } }else if(document.attachEvent){ Event.addEvent = function(target,eventType,handle){ target.attachEvent('on'+eventType,function(){ handle.call(target,arguments);//改變this指向 }); } }else{ Event.addEvent = function(target,eventType,handle){ target['on'+eventType] = handle; } } Event.addEvent (target,eventType,handle); } Event.addEvent(test,'click',function(){ alert('我是正確的,我是:'+this);//現在this指向的是正確的了 }); } </script> </head> <body> <h1 id="test">attachEvent this</h1> </body> </html>
還有detachEvent也一樣,可以通過上面方法實現。