event.target是事件真正发生的元素,event.currenttarget是当前执行事件处理函数的绑定节点;target始终指向初始触发点,currenttarget随事件流在捕获或冒泡阶段变化,目标阶段二者相等。

event.target 是事件真正发生的那个元素,event.currentTarget 是当前正在执行事件处理函数的那个绑定节点——它们指向的不是“谁被点”,而是“谁在响应”。
target 是源头,currentTarget 是接收者
用户点击页面上任意一个最深的可交互元素(比如按钮里的图标、文字、或按钮本身),那个元素就是 event.target。它不随事件传播改变,始终锁定最初触发点。
event.currentTarget 则代表此刻正在运行回调函数的 DOM 节点。在事件冒泡过程中,它可能随着事件向上经过不同层级而变化;但在常规委托写法中(如只在父级绑监听器),它就固定为那个父节点。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 直接在按钮上绑 click:target 和 currentTarget 总是同一个
- 在 ul 上绑 click,点里面的 li 或 span:target 是 li/span,currentTarget 是 ul
- 捕获阶段监听时,currentTarget 可能是祖先元素,但 target 还是原始点击元素
三阶段中它们的行为差异
DOM 事件分捕获 → 目标 → 冒泡三个阶段:
- 在目标阶段(即事件到达被点击元素本身时),target === currentTarget
- 在捕获或冒泡阶段,currentTarget 会随事件流移动,target 始终不变
- 哪怕监听器写在 document 上,点的是 body 里一个 div,target 还是那个 div,currentTarget 是 document
实际开发中怎么用
区分二者不是为了理论,而是解决真实问题:
- 要获取被点击的具体子项(如列表中的某条数据)→ 优先用
e.target.closest('li'),而不是直接取 e.target - 要操作绑定事件的容器(如统一关闭弹窗、清空表单)→ 用
e.currentTarget更安全可靠 - 判断是否点在自己身上(避免重复响应冒泡)→
e.target === e.currentTarget - 排除文本节点干扰 → 先检查
e.target.nodeType === Node.ELEMENT_NODE
一个容易忽略的细节
event.currentTarget 在绝大多数情况下和回调函数里的 this 指向一致(箭头函数除外)。但 this 可能被手动绑定或改变,而 currentTarget 是事件系统自动维护的只读属性,更值得信赖。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










