使用DOM0級方法指定的事件處理程序被認為是元素的方法。因此,這時候的事件處理程序是在元素的作用域中運行;換句話說,程序中的this引用當前元素。來看一個例子:
var btn=document.getElementById('myBtn');
btn.onclick=function(){
alert(this.id); //"myBtn"
}
在事件處理程序內(nèi)部,對象this始終等于currentTarget的值,而target則只包含事件的實際目標。如果直接將事件處理程序指定給了目標元素,則this、currentTarget和target包含相同的值。來看一個例子:
var btn=document.getElementById('myBtn');
btn.onclick=function(event){
alert(event.currentTarget===this); //true
alert(event.target===this); //true
}
備注
- currentTarget:
只讀的Element類型。其事件處理程序當前 正在處理事件的那個元素。- target:
只讀的Element類型。事件的目標。
因此,若事件是冒泡到祖先元素上進行處理的,則this和currentTarget是事件被委托的元素。來看一個例子:
//html
<div id="delegateEle">
<div id="targetEle">click</div>
</div>
//javascript
var dom=document.getElementById('delegateEle');
dom.addEventListener('click',function(e){
//以下為單擊targetEle元素時的結(jié)果
console.log(this.id); //"delegateEle"
console.log(e.currentTarget.id); //"delegateEle"
console.log(e.target.id); //"targetEle"
});