美文网首页
什么是DOM的事件委托

什么是DOM的事件委托

作者: moyufed | 来源:发表于2019-03-12 19:50 被阅读0次

DOM的事件委托(Event delegation)是通过事件 ”冒泡“ (event propagation) 来用单个父节点而非多个子节点响应 UI Events 的技巧。

冒泡

什么是冒泡?事件被绑定到它的目标节点 EventTarget 上,当事件监听器发现事件被触发后,将顺着目标节点的父级链逐层检查,并触发额外的事件监听器,这种动作持续向父级传递,包括 Document

有了事件冒泡,事件委托就有了基础,可以将事件的处理程序绑定给一个父级元素,当任何子节点触发了匹配的父级元素绑定的事件,即可触发父级节点的处理程序,这就是 事件委托

栗子:

<ul onclick="alert(event.type)">
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
</ul>

上面示例中,即时没有给每个 <li> 绑定事件,也会在点击任何一个 <li> 节点后弹出 "click" 。

优点

  1. 减少事件绑定,事件委托将很多子元素的事件绑定都集中到一个通用的父元素,使得动态创建和移除的元素更加方便,不需要考虑元素的事件绑定逻辑。假设需要对 <li> 标签进行增加,只管进行操作就行,不用增加元素的 “onclick” 事件。
  2. 减少事件监听使用的内存,这可能对那些经常重新加载的小页面效果不明显,但是对需要长时间运行的应用很重要。因为当元素被从 DOM 中移除之后很难追踪它对内存的使用,造成内存泄露,这是由元素的事件绑定造成的。有了事件委托,在移除子元素之后不用担心没有解除绑定事件。

使用

JavaScript

假设有一个父级元素 ul 和若干子元素 li

<ul id="parent">
    <li id="child-1">Child 1</li>
    <li id="child-2">Child 2</li>
    <li id="child-3">Child 3</li>
    <li id="child-4">Child 4</li>
    <li id="child-5">Child 5</li>
    <li id="child-6">Child 6</li>
</ul>

现在希望每一个 li 被点击时可以获取到它的内容,当事件冒泡到 ul 时,检查事件的 target 属性来获得被点击的节点,从而获取内容:

// 获取元素并且添加监听事件
document.getElementById("parent").addEventListener("click", function(e) {
    // e.target 是被点击的元素
    if(e.target && e.target.nodeName == "LI") {
        // List item found!  Output the ID!
        alert(e.target.innerHTML+ " was clicked!");
    }
});
jQuery.delegate
<ul id="jQueryDelegate">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
</ul>
$("#jQueryDelegate").delegate("li", "click", function () {
    $("#jQueryDelegate").append("<li>jQuery.delegate new item</li>");
});
jQuery.on
<ul id="jQueryOn">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
</ul>

$("#jQueryOn").on("click", "li", function () {
    $("#jQueryOn").append("<li>jQuery.on new item</li>");
});

参考资料

What is DOM Event delegation? By Crescent Fresh

How JavaScript Event Delegation Works By David Walsh

相关文章

  • js的事件委托机制

    什么是事件委托?为什么要用事件委托? 事件委托机制又叫事件代理.我们给dom绑定一个事件往往很简单 可是如果给一个...

  • 什么是DOM的事件委托

    DOM的事件委托(Event delegation)是通过事件 ”冒泡“ (event propagation) ...

  • 什么是 事件委托 有什么好处?

    谈一谈 什么是 事件委托 有什么好处 什么是事件委托: 就是利用事件冒泡的原理把本应该添加到具体的DOM 节点的的...

  • 第十四天vue面试题

    什么是事件委托?为什么要用事件委托? 1.支持为同一个DOM元素注册多个同类型事件 2.可将事件分成事件捕获和事件...

  • js事件委托(事件代理)

    定义:事件委托就是在DOM事件的冒泡阶段,把具体dom上发生的事件委托给父元素或祖先元素去处理。原理:要了解委托的...

  • JavaScript Events事件汇总

    事件参数、事件捕获冒泡 事件委托 事件默认行为 DOM 1 、DOM 2、DOM 3模型 实现遮罩功能(点击穿透、...

  • Zepto事件委托的坑

    事件委托在 .a 上可是却也触发了 .b 上的委托。可能是 .a 委托事件最后换了 class,DOM立刻更改了,...

  • DOM事件委托

    事件代理又叫事件委托,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可...

  • DOM事件委托

    使用场景 监听重复的事件===>用于节省监听数(内存小) 监听当前暂时还没有的元素===>动态监听元素 使用方法

  • DOM 事件委托

    事件代理又叫事件委托,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可...

网友评论

      本文标题:什么是DOM的事件委托

      本文链接:https://www.haomeiwen.com/subject/kchopqtx.html