event.currenttarget始终指向绑定事件监听器的dom元素;如父div绑click事件而点击其button子元素时,target是button,currenttarget是div。

event.currentTarget 指向当前正在执行事件处理函数的那个元素,也就是你真正绑定事件监听器的 DOM 元素。它和 event.target 不同——后者是实际触发事件的元素(比如点击了子元素,target 就是那个子元素),而 currentTarget 始终是你调用 addEventListener 的那个元素。
什么时候 currentTarget 和 target 不一样?
常见于事件冒泡场景:给父元素绑事件,但用户点的是它的某个子元素。
- 假设有一个
<div id="box"><button>点我</button></div> - 你在
#box上绑了click事件 - 用户点击了里面的
<button></button>,此时:
–event.target是button元素
–event.currentTarget是div#box元素(因为事件监听器是绑在它身上的)
如何正确使用 currentTarget
直接在事件回调中访问 event.currentTarget 即可,它始终是监听器所依附的元素:
document.getElementById('box').addEventListener('click', function(e) {
console.log(e.currentTarget); // 始终是 #box 元素
console.log(e.target); // 可能是 button、span 或其他子元素
});
currentTarget 的典型用途
-
统一处理容器内多个子项的交互:不用给每个子元素单独绑事件,只在父容器上监听,再用
e.currentTarget确保操作的是容器本身(比如关闭整个面板、展开折叠区域) -
避免重复判断绑定对象:尤其在动态生成或复用事件处理器时,
e.currentTarget比this更可靠(箭头函数中this不指向元素,但e.currentTarget始终有效) -
配合事件委托做安全操作:比如只允许对特定 class 的子元素响应,但样式/逻辑主体仍属于父容器,这时用
e.currentTarget控制父级状态更清晰
注意点
-
e.currentTarget在事件捕获和冒泡阶段都有效,且值不变 - 如果事件没被触发(比如监听器根本没执行),就不存在
e.currentTarget - 在
removeEventListener时,必须用同一个函数引用,currentTarget才能准确对应到目标元素
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











