e.target 與 e.currentTarget

MDN 中對 target的解釋為:一個(gè)觸發(fā)事件的對象的引用耻台,當(dāng)事件處理程序在事件的冒泡或捕獲階段被調(diào)用時(shí)徙歼。
對于 currentTarget的解釋為:當(dāng)事件遍歷DOM時(shí),標(biāo)識(shí)事件的當(dāng)前目標(biāo)。它總是引用事件處理程序附加到的元素,而不是event.target,它標(biāo)識(shí)事件發(fā)生的元素存皂。
舉個(gè)例子來說明:

事件冒泡階段

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <ul>
    <li>hello 1</li>
    <li>hello 2</li>
    <li>hello 3</li>
    <li>hello 4</li>
  </ul>
  <script>
    let ul = document.querySelectorAll('ul')[0]
    let aLi = document.querySelectorAll('li')
    ul.addEventListener('click',function(e){
       let oLi1 = e.target  
       let oLi2 = e.currentTarget
        console.log(oLi1)   //  被點(diǎn)擊的li
        console.log(oLi2)   // ul
        console.og(oLi1===oLi2)  // false
    })
  </script>
</body>
</html>

我們知道晌坤,e.target可以用來實(shí)現(xiàn)事件委托,該原理是通過事件冒泡(或者事件捕獲)給父元素添加事件監(jiān)聽旦袋,e.target指向引發(fā)觸發(fā)事件的元素骤菠,如上述的例子中,e.target指向用戶點(diǎn)擊的li疤孕,由于事件冒泡商乎,li的點(diǎn)擊事件冒泡到ul上,通過ul添加監(jiān)聽事件而達(dá)到了給每一個(gè)li添加監(jiān)聽事件的效果祭阀,而e.currentTarget指向的是給綁定事件監(jiān)聽的那個(gè)對象鹉戚,即ul,從這里可以發(fā)現(xiàn)专控,e.currentTarget===this返回true抹凳,而e.target===this返回false。所以e.targee.currentTarget是不相等的伦腐。

注意:在jq提供的on方法中赢底,e.currentTarget與該方法接收的第二個(gè)參數(shù)有關(guān),根據(jù)jq的文檔描述

如果省略selector或者是null柏蘑,那么事件處理程序被稱為直接事件或者直接綁定事件幸冻。每次選中的元素觸發(fā)事件時(shí),就會(huì)執(zhí)行處理程序咳焚,不管它直接綁定在元素上洽损,還是從后代(內(nèi)部)元素冒泡到該元素的。
當(dāng)提供了selector參數(shù)是革半,事件處理程序是指委派事件(事件委托或事件代理)趁啸。事件不會(huì)在直接綁定的元素上觸發(fā)强缘。jq會(huì)從 event target 開始向上層元素(例如,由最內(nèi)層元素到最外層元素)開始冒泡不傅,并且在傳播路徑上所有綁定了相同事件的元素若滿足匹配的選擇器旅掂,那么這些元素上的事件也會(huì)被觸發(fā)。

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
    li{
      padding: 5px;
      border: 1px solid red;
    }
    span{
      border: 1px solid #000;
    }
  </style>
</head>
<body>
  <ul>
    <li><span>hello 1</span></li>
    <li><span>hello 1</span></li>
    <li><span>hello 1</span></li>
    <li><span>hello 1</span></li>
  </ul>
  <script>
    let ul = document.querySelectorAll('ul')[0]
    let aLi = document.querySelectorAll('li')
    $('ul').on('click','li',function(e){
 
        console.log(e.target)   //  被點(diǎn)擊的元素
        console.log(e.currentTarget)   //  li   
        console.log(e.currentTarget === this)  // true
    })
  </script>
</body>
</html>

當(dāng)li元素中含有自元素的時(shí)候访娶,e.target指的是觸發(fā)事件的元素商虐,可能是spsn也可能是li,此時(shí)的e.tcurrentTarget指的是selector那個(gè)參數(shù)崖疤,也就是本例中的li秘车。如果省略selector參數(shù),那么它和addEventListener中的e.targete.currentTarget是一致的劫哼。

事件目標(biāo)階段

在DOM事件流中分為幾個(gè)不同的階段叮趴,如圖所示:

1620777-dafb1778461af7d9.png

上述例子中是事件冒泡階段,e.currentTargete.target是不相等的权烧,但是在事件的目標(biāo)階段眯亦,e.currentTargete.target是相等的。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <ul>
    <li>hello 1</li>
    <li>hello 2</li>
    <li>hello 3</li>
    <li>hello 4</li>
  </ul>
  <script>
    let ul = document.querySelectorAll('ul')[0]
    let aLi = document.querySelectorAll('li')
    for(let i=0;i<aLi.length;i++){  
      aLi[i].addEventListener('click',function(e){
        let oLi1 = e.target  
        let oLi2 = e.currentTarget
        console.log(oLi1)  // li
        console.log(oLi2)  // li
        console.og(oLi1===oLi2)  // true
      })
    }
  </script>
</body>
</html>

在本例中般码,事件的目標(biāo)階段li妻率,由于e.currentTarget始終指向添加監(jiān)聽事件的那個(gè)對象,即aLi[i]板祝,也就是HTML中的li宫静,而e.target指向觸發(fā)事件監(jiān)聽的那個(gè)對象,也是li券时,因此e.targete.currentTarget相等孤里,同時(shí)也和this相等。

總結(jié)

  • e.target指向觸發(fā)事件監(jiān)聽的對象橘洞。
  • e.currentTarget指向添加監(jiān)聽事件的對象扭粱。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市震檩,隨后出現(xiàn)的幾起案子琢蛤,更是在濱河造成了極大的恐慌,老刑警劉巖抛虏,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件博其,死亡現(xiàn)場離奇詭異,居然都是意外死亡迂猴,警方通過查閱死者的電腦和手機(jī)慕淡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沸毁,“玉大人峰髓,你說我怎么就攤上這事傻寂。” “怎么了携兵?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵疾掰,是天一觀的道長。 經(jīng)常有香客問我徐紧,道長静檬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任并级,我火速辦了婚禮拂檩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘲碧。我一直安慰自己稻励,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布愈涩。 她就那樣靜靜地躺著望抽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钠署。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天荒椭,我揣著相機(jī)與錄音谐鼎,去河邊找鬼。 笑死趣惠,一個(gè)胖子當(dāng)著我的面吹牛狸棍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播味悄,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼草戈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了侍瑟?” 一聲冷哼從身側(cè)響起唐片,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涨颜,沒想到半個(gè)月后费韭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庭瑰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年星持,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弹灭。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡督暂,死狀恐怖揪垄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逻翁,我是刑警寧澤饥努,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站卢未,受9級特大地震影響肪凛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辽社,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一伟墙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滴铅,春花似錦戳葵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至噩翠,卻和暖如春戏自,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伤锚。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工擅笔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屯援。 一個(gè)月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓猛们,卻偏偏與公主長得像,于是被迫代替她去往敵國和親狞洋。 傳聞我的和親對象是個(gè)殘疾皇子弯淘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在DOM事件對象中有兩個(gè)屬性總是時(shí)不時(shí)的困擾我,就是target和currentTarget吉懊,有時(shí)候很迷惑分不清兩...
    plainnany閱讀 57,349評論 5 55
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,342評論 0 8
  • 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件$ele.click()$ele.click(handler(...
    阿r阿r閱讀 1,607評論 2 10
  • 本篇博客源地址 總結(jié): 鼠標(biāo)事件 1.click與dbclick事件ele.click()ele.click(ha...
    ZombieBrandg閱讀 675評論 0 1
  • 第1章 鼠標(biāo)事件 1-1 jQuery鼠標(biāo)事件之click與dbclick事件 用交互操作中庐橙,最簡單直接的操作就是...
    mo默22閱讀 1,282評論 0 6