event.currenttarget始终指向事件监听器绑定的元素,而非实际触发事件的target元素;适用于事件委托、多元素复用同一回调等场景,如给ul绑定点击事件时稳定获取ul本身。

event.currentTarget 指向的是当前正在处理事件的**事件监听器所绑定的那个元素**,和 event.target(真正触发事件的元素)不同。它在事件委托、动态绑定或同一函数复用多个元素时特别有用。
什么时候用 currentTarget?
当你给一个父元素绑定了事件监听器,但实际点击的是它的子元素(比如列表项、按钮),又想始终操作父容器本身时,currentTarget 就能稳定拿到那个父元素,不受点击位置影响。
常见场景包括:
- 给
ul绑监听器,点击任意li都想对整个ul做操作 - 用同一个回调函数处理多个按钮,但需要知道是哪个按钮调用了它(尤其用
addEventListener直接绑定时) - 避免反复写
if (e.target === btn1) {...}这类判断
基本用法示例
直接在事件回调中访问 e.currentTarget:
const container = document.getElementById('myContainer');
container.addEventListener('click', function(e) {
console.log('绑定元素:', e.currentTarget); // 始终是 #myContainer
console.log('点击元素:', e.target); // 可能是里面的 span、button 等
});
和 event.target 的关键区别
假设 HTML 是这样:
<div id="box"> <button>点我</button> </div>
你给 #box 绑了 click 事件:
- 点击
button→e.target是button,e.currentTarget是div#box - 点击
div空白处 → 两者都是div#box
也就是说:currentTarget 看“谁听了事件”,target 看“谁被点到了”。
注意点
- 只在事件处理函数内部有效,事件结束后不可用
- 箭头函数里仍可用,因为它不是基于
this,而是事件对象属性 - 和
this在普通函数中通常等价(除非用bind或call改过上下文) - 不适用于已移除监听器的元素,也不反映 DOM 变化后的状态
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











