在 JavaScript 中,事件的目标源对象是 event.target,它始终指向事件最初触发的 DOM 元素;event.currentTarget 指当前执行处理函数的绑定元素,随冒泡阶段变化;target 不受冒泡、捕获或 stopPropagation() 影响,而 currentTarget 和 this 则等价且会变化。

在 JavaScript 中,判断当前事件的“目标源对象”(即事件最初触发的那个元素),关键不是靠冒泡过程来识别,而是直接使用事件对象的 event.target 属性。
什么是 target 和 currentTarget?
event.target 指的是事件**最初发生**的 DOM 元素(源头),无论事件是否冒泡、捕获或委托,它始终不变。
event.currentTarget 指的是**当前正在执行事件处理函数的那个元素**(即绑定监听器的元素),在冒泡过程中会随着传播阶段变化。
如何准确获取目标源对象?
只需在事件处理函数中访问 event.target,它就是你想要的“最初点击/触发的那个元素”:
- 哪怕你在父级元素上监听 click,只要子元素被点击,
event.target就是那个子元素 - 即使事件冒泡到 document,
event.target仍指向最开始被交互的元素 - 它不会受 stopPropagation() 影响 —— target 在事件派发时就已确定
常见误判场景与验证方法
容易混淆的是把 this 或 event.currentTarget 当作目标源。例如:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
document.getElementById('parent').addEventListener('click', function(e) {
console.log('target:', e.target); // 点击 span → 输出 span 元素
console.log('currentTarget:', e.currentTarget); // 始终是 #parent 元素
console.log('this:', this); // 等同于 currentTarget
});
若想确认是否真的是“源头”,可结合以下方式验证:
立即学习“Java免费学习笔记(深入)”;
- 检查
e.target === e.currentTarget:相等说明事件没冒泡,直接发生在该元素上 - 用
e.target.tagName或e.target.classList快速判断类型或类名 - 配合
e.target.matches('button[data-action]')精准筛选目标是否符合某选择器
冒泡中区分目标与路径
如果需要知道事件经过了哪些祖先元素,可用 event.composedPath()(标准)或 event.path(非标准但广泛支持):
-
e.composedPath()返回从 target 开始向上到根节点的元素数组(含 shadow root) -
e.path在 Chrome/Firefox 中返回类似路径,但不跨 shadow boundary - 注意:这些只是传播路径记录,不能替代
target判断源头

















