事件委托通过在父元素监听事件并用event.target识别目标子元素,实现一次绑定管理所有子项,降低内存开销、适配动态内容,但需正确过滤目标并及时清理监听器。

直接在父元素上监听事件,用 event.target 判断实际点击的是哪个子元素,就能避免为每个子项单独绑定监听器,从而大幅减少内存开销和重复绑定操作。
只绑一次,管住所有子元素
把事件监听器加在共同父容器上,而不是每个子节点。比如列表用 <ul> 接收点击,而不是给每个 <li> 单独加 addEventListener。
- 100 个
li→ 传统方式要创建 100 个监听函数实例;事件委托只需 1 个 - 监听器数量从 O(n) 降到 O(1),内存占用直线下降
- 后续新增的
li自动生效,无需再调用addEventListener
精准识别目标,避免误触发
监听父元素后,必须检查 event.target 是否是你关心的子类型,否则点到空白处或嵌套标签也会进逻辑。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用
e.target.tagName === 'LI'或e.target.matches('li[data-id]')做过滤 - 注意:如果
li里有图标、文字 span 等子元素,e.target可能是它们,不是li本身 —— 此时可用e.target.closest('li')向上找最近匹配项 - 避免写成
if (e.target.classList.contains('item'))这类易错判断,优先用语义明确的选择器
适用动态内容场景
AJAX 加载、用户新增、轮播切换等导致 DOM 频繁增删时,事件委托天然适配。
立即学习“Java免费学习笔记(深入)”;
- 不用监听“新增节点”再补绑事件,也不用担心旧监听器残留
- 删除元素时无需手动
removeEventListener,无内存泄漏风险 - 配合模板字符串或
innerHTML插入新项后,点击立刻响应
别忘了移除监听器的时机
虽然委托本身省事,但父容器若被销毁(如组件卸载、页面跳转),仍需主动清理监听器。
- 保存监听函数引用,方便后续
removeEventListener - 不要用匿名函数绑定:
el.addEventListener('click', function(){})→ 无法解绑 - 推荐写法:
const handler = e => { /* logic */ }; el.addEventListener('click', handler); // 清理时 el.removeEventListener('click', handler);

















