欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS事件委托(什么情况下使用事件委托)

程序员文章站 2022-06-16 10:48:02
...

1. 什么是事件委托

  • 事件委托:把事情委托给别人,代为处理。

  • 事件委托也称为事件代理,在 jQuery 里面称为事件委派。

  • 理解:说白了就是,不给子元素注册事件,给父元素注册事件,把处理代码在父元素的事件中执行。

  • js事件中的委托:

  <ul>
        <li>知否知否,应该有弹框在手</li>
        <li>知否知否,应该有弹框在手</li>
        <li>知否知否,应该有弹框在手</li>
        <li>知否知否,应该有弹框在手</li>
        <li>知否知否,应该有弹框在手</li>
  </ul>

点击每个 li 都会弹出对话框,以前需要给每个 li 注册事件,是非常辛苦的,而且访问 DOM 的次数越多,这就会延长整个页面的交互就绪时间,那怎么解决呢?

2. 事件委托的原理

​ 不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。

​ 以上案例:给 ul 注册点击事件,然后利用事件对象的 target 来找到当前点击的 li,因为点击 li,事件会冒泡到 ul 上, ul 有注册事件,就会触发事件监听器

3. 事件委托的作用

  • 我们只操作了一次 DOM ,提高了程序的性能。

  • 动态新创建的子元素,也拥有事件。

    <ul>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
    </ul>
    <script>
        /*事件委托的核心原理:给父节点添加侦听器, 
        利用事件冒泡影响每一个子节点*/
        var ul = document.querySelector('ul');
        ul.addEventListener('click', function(e) {
            // e.target 这个可以得到我们点击的对象
            e.target.style.backgroundColor = 'pink';
        })
    </script>

4. 总结

  • 事件委托,子元素委托父元素
  • 什么情况下用事件委托:当要给一组元素添加相同事件时,可以直接添加给父亲
  • 事件委托原理:事件冒泡,当触发子元素的事件时,通过冒泡,事件传递给父亲,父亲身上绑定有事件处理程序,进而触发
相关标签: 事件委托