亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

addEventListener和attachEvent二者綁定的執(zhí)行函數(shù)中的this不相同

 更新時(shí)間:2012年12月09日 17:32:23   作者:  
寫 addEventListener 和 attachEvent 區(qū)別的博文不少,不過大部分都把重點(diǎn)放置于前者是Firefox chrome,后者只是存在于IE系列中
寫 addEventListener 和 attachEvent 區(qū)別的博文不少,不過大部分都把重點(diǎn)放置于前者是Firefox chrome,后者只是存在于IE系列中。

最近在寫一個(gè)事件代理的時(shí)候,遇到一個(gè)BUG,發(fā)現(xiàn)除此外,二者綁定的執(zhí)行函數(shù)中的 this 是不相同的,addEventListener 和 attachEvent函數(shù)在運(yùn)行時(shí)候的上下文是不相同的。
用了一個(gè)簡(jiǎn)單的demo來描述這個(gè)不同點(diǎn):
復(fù)制代碼 代碼如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<<title>測(cè)試</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"; // 定義一個(gè)全局變量
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>

點(diǎn)擊 test1
chrome 下 第一次alert:" a1",第二次alert :"undefined"
firefox 下 第一次alert:" a1",第二次alert :"undefined"
IE 中 第一次alert:" a1",第二次alert :"undefined"
這很好理解,這時(shí)候的this指向 #a1 這個(gè)DOM,所以alert id是 #a1的id “a1”,然后在this中,并沒有testGolb這個(gè)變量,所以是undefined
點(diǎn)擊 test2
chrome下 第一次alert:" a1",第二次alert :"undefined"
firefox 下 第一次alert:" a1",第二次alert :"undefined"
IE 中 第一次alert:" undefined",第二次alert :"diff"

chrome 和 firefox同點(diǎn)擊test1時(shí)候的表現(xiàn)是一致的,而IE就不同了。使用attachEvent綁定事件時(shí)候,函數(shù)中的this指向的是window,并不是添加事件的dom,所以第一次的alert 值是 undefined,而this.testGlob 的值是diff。

相關(guān)文章

最新評(píng)論