应使用event.target获取触发事件的原始目标元素,它始终指向用户实际交互的最内层DOM节点;而this或event.currentTarget指向绑定事件的父容器,二者在事件委托中必须严格区分。

在 JavaScript 中,获取触发事件的目标元素主要依靠事件对象的 target 属性。这是最直接、最常用的方式,适用于绝大多数事件监听场景。
使用 event.target 获取原始触发目标
当事件发生时,浏览器会自动将一个事件对象传入事件处理函数,该对象的 target 属性始终指向**最初触发事件的 DOM 元素**(即用户实际点击、输入或交互的那个元素)。
- 即使事件经过冒泡,event.target 不会改变,始终是原始目标
- 与 this 或 event.currentTarget 不同,后者可能因事件绑定位置不同而指向不同元素
- 适合用于委托监听(如在父容器上监听子元素事件)
示例:
文本
document.getElementById('container').addEventListener('click', function(e) {
console.log(e.target); // 点击按钮时输出 button 元素;点击 span 时输出 span 元素
});
区分 target 和 currentTarget
容易混淆的是:event.target 是你“点哪里,它就是哪里”;而 event.currentTarget 是“你在哪个元素上绑的监听器,它就是那个元素”。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。
- 在事件未冒泡或直接绑定时,两者通常相同
- 在事件委托中,target 是子元素,currentTarget 是父容器
- 用 target 判断具体操作对象,用 currentTarget 安全访问绑定上下文
安全获取目标元素内容或属性
拿到 event.target 后,可进一步读取其属性或内容,但需注意元素类型和是否存在:
立即学习“Java免费学习笔记(深入)”;
- 先做类型判断:if (e.target.nodeType === Node.ELEMENT_NODE)
- 用 e.target.tagName 或 e.target.classList 区分元素类型
- 访问 e.target.value(input)、e.target.textContent(文本节点)等需确认是否支持
- 避免直接访问不存在的属性,建议加可选链或条件判断
兼容性与注意事项
event.target 在所有现代浏览器及 IE9+ 中均支持,无需 polyfill。
- IE8 及更早版本使用 event.srcElement,现已基本淘汰
- 如果使用 jQuery,event.target 仍可用,但推荐统一用原生方式保持一致性
- 在自定义事件或合成事件(如 React)中,需确认框架是否保留原生 event.target

















