JavaScript 词条目录
前端Wiki/词条/事件委托

事件委托

定义利用事件冒泡把子元素的事件统一交由共同祖先监听,动态子元素也无需重绑

给 100 个 li 各绑一个监听器既浪费又脆弱——新增的 li 没有事件。事件委托只在 ul 上绑一个监听器,用 event.target 判断真正被操作的子元素。新加的 li 天然被覆盖,顺带省下 99 个监听器。

委托的实现要点:用 e.target.matches(".del") 或 closest() 判断目标,注意 e.currentTarget 是绑定的元素、e.target 是真正触发的元素。取消冒泡(stopPropagation)会破坏委托,动态列表场景要小心。

JavaScript
<ul id="list">
  <li>语文 <button class="del" data-id="1">删除</button></li>
  <li>数学 <button class="del" data-id="2">删除</button></li>
</ul>
<script>
  const list = document.getElementById('list');
  // 委托:只绑 ul 一次,以后动态加 li 也自动生效
  list.addEventListener('click', e => {
    const btn = e.target.closest('.del');      // 命中删除按钮
    if (btn) btn.closest('li').remove();
  });
  // 动态新增的 li 无需再绑事件
  list.insertAdjacentHTML('beforeend', '<li>英语 <button class="del">删除</button></li>');
</script>
⚠ 常见误区
🔗 相关词条事件冒泡与委托事件对象 event事件监听 addEventListener
← 返回来源章节事件冒泡与委托