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>

事件捕获:当某个元素触发某个事件(如onclick),顶层对象document就会发出一个事件流,随着DOM树的节点向目标元素节点流去,直到到达事件真正发生的目标元素。在这个过程中,事件相应的监听函数是不会被触发的。

事件目标:当到达目标元素之后,执行目标元素该事件相应的处理函数。如果没有绑定监听函数,那就不执行。

事件起泡:从目标元素开始,往顶层元素传播。途中如果有节点绑定了相应的事件处理函数,这些函数都会被一次触发。如果想阻止事件起泡,可以使用e.stopPropagation()(Firefox)或者e.cancelBubble=true(IE)来组织事件的冒泡传播。

delegate.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 事件代理在JS世界中一个非常有用也很有趣的功能。当我们需要对很多元素添加事件的时候,可以通过将事件添加到它们的父节...
    hey_沙子阅读 168评论 0 0
  • JavaScript事件代理 当我们需要对很多元素添加事件的时候,可以通过将事件添加到它们的父节点而将事件委托给父...
    李诺哦阅读 1,151评论 0 1
  • 1.背景介绍 1.1什么是事件委托? 事件委托还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委...
    我叫于搞吧阅读 1,684评论 4 9
  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 1,392评论 0 8
  • 烟袅袅 湖畔晨光好 七十老翁归来早 一路渔歌 一船鱼鸭饱 鱼鸭饱 静坐船舷 看桨起桨落桨下 青青草 ……
    阿尔他霞阅读 307评论 8 6