addEventListener和attachEvent二者綁定的執(zhí)行函數(shù)中的this不相同
更新時間:2012年12月09日 17:32:23 作者:
寫 addEventListener 和 attachEvent 區(qū)別的博文不少,不過大部分都把重點放置于前者是Firefox chrome,后者只是存在于IE系列中
寫 addEventListener 和 attachEvent 區(qū)別的博文不少,不過大部分都把重點放置于前者是Firefox chrome,后者只是存在于IE系列中。
最近在寫一個事件代理的時候,遇到一個BUG,發(fā)現(xiàn)除此外,二者綁定的執(zhí)行函數(shù)中的 this 是不相同的,addEventListener 和 attachEvent函數(shù)在運行時候的上下文是不相同的。
用了一個簡單的demo來描述這個不同點:
<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>
點擊 test1
chrome 下 第一次alert:" a1",第二次alert :"undefined"
firefox 下 第一次alert:" a1",第二次alert :"undefined"
IE 中 第一次alert:" a1",第二次alert :"undefined"
這很好理解,這時候的this指向 #a1 這個DOM,所以alert id是 #a1的id “a1”,然后在this中,并沒有testGolb這個變量,所以是undefined
點擊 test2
chrome下 第一次alert:" a1",第二次alert :"undefined"
firefox 下 第一次alert:" a1",第二次alert :"undefined"
IE 中 第一次alert:" undefined",第二次alert :"diff"
chrome 和 firefox同點擊test1時候的表現(xiàn)是一致的,而IE就不同了。使用attachEvent綁定事件時候,函數(shù)中的this指向的是window,并不是添加事件的dom,所以第一次的alert 值是 undefined,而this.testGlob 的值是diff。
最近在寫一個事件代理的時候,遇到一個BUG,發(fā)現(xiàn)除此外,二者綁定的執(zhí)行函數(shù)中的 this 是不相同的,addEventListener 和 attachEvent函數(shù)在運行時候的上下文是不相同的。
用了一個簡單的demo來描述這個不同點:
復制代碼 代碼如下:
<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>
點擊 test1
chrome 下 第一次alert:" a1",第二次alert :"undefined"
firefox 下 第一次alert:" a1",第二次alert :"undefined"
IE 中 第一次alert:" a1",第二次alert :"undefined"
這很好理解,這時候的this指向 #a1 這個DOM,所以alert id是 #a1的id “a1”,然后在this中,并沒有testGolb這個變量,所以是undefined
點擊 test2
chrome下 第一次alert:" a1",第二次alert :"undefined"
firefox 下 第一次alert:" a1",第二次alert :"undefined"
IE 中 第一次alert:" undefined",第二次alert :"diff"
chrome 和 firefox同點擊test1時候的表現(xiàn)是一致的,而IE就不同了。使用attachEvent綁定事件時候,函數(shù)中的this指向的是window,并不是添加事件的dom,所以第一次的alert 值是 undefined,而this.testGlob 的值是diff。
相關(guān)文章
javascript XMLHttpRequest對象全面剖析
通過不必把Web頁面寄送到服務器而實現(xiàn)數(shù)據(jù)傳送,XMLHttpRequest對象為客戶端與服務器之間提供了一種動態(tài)的交互能力。2010-04-04uni-app自定義組件components導入失敗或頁面不顯示文本等解決方法
這篇文章主要給大家介紹了關(guān)于uni-app自定義組件components導入失敗或頁面不顯示文本等的解決方法,眾所周知Uni-app支持使用自定義組件,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-08-08js阻止默認事件與js阻止事件冒泡示例分享 js阻止冒泡事件
嵌套的div元素,如果父級和子元素都綁定了一些事件,那么在點擊最內(nèi)層子元素時可能會觸發(fā)父級元素的事件,下面介紹一下js阻止默認事件與js阻止事件冒泡示例,大家參考使用吧2014-01-01Mobile Web開發(fā)基礎(chǔ)之四--處理手機設(shè)備的橫豎屏問題
這篇文章主要介紹了Mobile Web開發(fā)基礎(chǔ)之-—處理手機設(shè)備的橫豎屏,window.orientation屬性與onorientationchange事件以及media query方式是開發(fā)過程中需要注意到的兩種解決方式,需要的朋友可以參考下2017-08-08