事件委托

353 阅读1分钟

事件委托也叫事件代理,在jQuery中叫事件委派。

事件委托的原理:(面试经常问)
不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。

事件委托的作用:
只操作了一次dom,提高程序的性能

body部分

<ul>
    <li>更上一层楼</li>
    <li>更上一层楼</li>
    <li>更上一层楼</li>
</ul>

script部分

<script>
    // 事件委托的核心原理:给父节点添加侦听器, 利用事件冒泡影响每一个子节点
    var ul = document.querySelector('ul');
    ul.addEventListener('click',function(e){
      e.target.style.backgroundColor = 'tomato';
    })
</script>

效果:

bandicam 2021-09-27 20-06-47-971.gif

扩展:

只要可行,就应该考虑只给 document 添加一个事件处理程序,通过它处理页面中所有某种类型的事件。相对于之前的技术,事件委托具有如下优点。

  • document 对象随时可用,任何时候都可以给它添加事件处理程序(不用等待 DOMContentLoaded或 load 事件)。这意味着只要页面渲染出可点击的元素,就可以无延迟地起作用。

  • 节省花在设置页面事件处理程序上的时间。只指定一个事件处理程序既可以节省 DOM 引用,也可以节省时间。

  • 减少整个页面所需的内存,提升整体性能。

  • 最适合使用事件委托的事件包括:click、mousedown、mouseup、keydown 和 keypress。