js事件代理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <ul id="parent-list">
      <li id="post-1">Item 1</li>
      <li id="post-2">Item 2</li>
      <li id="post-3">Item 3</li>
      <li id="post-4">Item 4</li>
      <li id="post-5">Item 5</li>
      <li id="post-6">Item 6</li>
    </ul>
    <script>
        document.getElementById("parent-list").addEventListener("click",function(e) {
          // 檢查事件源e.targe是否為Li
          if(e.target && e.target.nodeName.toUpperCase() == "LI") {
            // 真正的處理過程在這里
            console.info(e.target)
            console.log("List item ",e.target.id," was clicked!");
          }
        });
    </script>
</body>
</html>

事件捕獲:當(dāng)某個元素觸發(fā)某個事件(如onclick),頂層對象document就會發(fā)出一個事件流,隨著DOM樹的節(jié)點向目標(biāo)元素節(jié)點流去,直到到達事件真正發(fā)生的目標(biāo)元素。在這個過程中,事件相應(yīng)的監(jiān)聽函數(shù)是不會被觸發(fā)的。

事件目標(biāo):當(dāng)?shù)竭_目標(biāo)元素之后,執(zhí)行目標(biāo)元素該事件相應(yīng)的處理函數(shù)。如果沒有綁定監(jiān)聽函數(shù),那就不執(zhí)行。

事件起泡:從目標(biāo)元素開始,往頂層元素傳播。途中如果有節(jié)點綁定了相應(yīng)的事件處理函數(shù),這些函數(shù)都會被一次觸發(fā)。如果想阻止事件起泡,可以使用e.stopPropagation()(Firefox)或者e.cancelBubble=true(IE)來組織事件的冒泡傳播。

delegate.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 事件代理在JS世界中一個非常有用也很有趣的功能。當(dāng)我們需要對很多元素添加事件的時候,可以通過將事件添加到它們的父節(jié)...
    hey_沙子閱讀 173評論 0 0
  • JavaScript事件代理 當(dāng)我們需要對很多元素添加事件的時候,可以通過將事件添加到它們的父節(jié)點而將事件委托給父...
    李諾哦閱讀 1,230評論 0 1
  • 1.背景介紹 1.1什么是事件委托? 事件委托還有一個名字叫事件代理,JavaScript高級程序設(shè)計上講:事件委...
    我叫于搞吧閱讀 1,713評論 4 9
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點是DOM的常...
    凜0_0閱讀 1,513評論 0 8
  • 煙裊裊 湖畔晨光好 七十老翁歸來早 一路漁歌 一船魚鴨飽 魚鴨飽 靜坐船舷 看槳起槳落槳下 青青草 ……
    阿爾他霞閱讀 325評論 8 6

友情鏈接更多精彩內(nèi)容