JavaScript tips —— target與currentTarget的區別


定義

以下是紅寶書的描述

屬性/方法 類型 讀/寫 說明
currentTarget Element 只讀 其事件處理程序當前正在處理事件的那個元素
target Element 只讀 事件的目標

 

MDN:

currentTarget: 當事件遍歷DOM時,標識事件的當前目標。它總是引用事件處理程序附加到的元素,而不是event.target,它標識事件發生的元素。

target:一個觸發事件的對象的引用。

 

結論

emmmm,這說的真晦澀,不自己動手還真看不出有啥差別,先給結論吧:currentTarget指的是事件觸發后,冒泡到綁定處理程序的元素,就是綁定事件處理程序的元素,target指的是觸發事件的元素

 

demo

html:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3   <head>
 4     <meta charset="UTF-8">
 5     <title>currentTarget&target</title>
 6   </head>
 7   <body>
 8     <div id="div1">
 9       <div id="div2">
10         <div id="div3">
11           click me ~
12         </div>
13       </div>
14     </div>
15   </body>
16 </html>

JavaScript:

 1 let div1 = document.getElementById('div1'),
 2     div2 = document.getElementById('div2'),
 3     div3 = document.getElementById('div3');
 4 
 5 div1.addEventListener('click', (ev) => {
 6   console.log(`target: ${ev.target.id}     currentTarget: ${ev.currentTarget.id}`);
 7 });
 8 
 9 div2.addEventListener('click', (ev) => {
10   console.log(`target: ${ev.target.id}     currentTarget: ${ev.currentTarget.id}`);
11 });
12 
13 div3.addEventListener('click', (ev) => {
14   console.log(`target: ${ev.target.id}     currentTarget: ${ev.currentTarget.id}`);
15 });

 

當單擊div3時,事件依次冒泡。但是觸發時間的元素為div3,所以target為div3,而從捕獲階段,到冒泡階段途徑了元素div3,div2,div1,綁定事件處理元素的依次為div3,div2,div1,所以currentTarget為div3,div2,div1。

 

瀏覽器兼容性

target

在 IE6-8 中,事件模型與標准不同。使用非標准的 element.attachEvent() 方法綁定事件監聽器。在該模型中,事件對象有一個 srcElement 屬性,等價於target 屬性。

target = ev.target || ev.srcElement;

 

currentTarget

IE6-8中,事件模型與標准不一樣,使用非標准的 element.attachEvent() 來綁定事件監聽器。該模型中,沒有等價於 event.currentTarget 的接口,且 this 指向全局對象。

一種模擬 event.currentTarget 功能的方法是:將監聽器包在一個函數中,然后使用 Function.prototype.call 調用這個包裝函數,並將元素對象作為第一個參數。這樣,this就是想要的值了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM