e.currentTarget Versus e.target

e.currentTarget Versus e.target

這篇介紹e.currentTarget和e.target兩者差異,當一個dom物件被觸發一個事件後,事件會冒泡,如果冒泡到父節點,且父節點也bind相同e.事件的話就會觸發該事件。
這是可通過e.currentTarget 和 e.target來判斷事件的bind物件和觸發物件分別是誰。

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HTML:
<ul id="fa">
<li class="son1">son1</li>
<li class="son2">son2</li>
<li class="son3">son3</li>
</ul>
JavaScript:
let fa = document.getElementById('fa');
fa.onclick = function(e) {
console.log(`%ccurrentTarget: %c${e.currentTarget.innerHTML}`, 'color: red', 'color: red');
console.log(`%ctarget: %c${e.target.innerHTML}`, 'color: yellow', 'color:yellow');
}

當點選<ul></ul>相當於在id=fa的節點上觸發時間,因此target、currentTarget均指向id=fa節點
當點選<li>son1、son2、son3</li>時,事件是在子節點觸發,但事件是繫結在父節點上,因此currentTarget指向ul節點,target指向li節點

結論

1
2
e.currentTarget:指的是註冊事件物件
e.target:指的是實際觸發事件的物件