掘金文章归档 · 第 43 篇 JS 进阶系列 8/8 事件 · DOM

e.target 和 e.currentTarget 的区别

谁触发了事件指向谁,谁绑定了事件指向谁

原文作者:随意_(掘金) | juejin.cn/post/7527977068417761331 | 发布于 2025-07-18 | 阅读 486 · 约 1 分钟

1一、核心区别

在前端开发中,e.target 和 e.currentTarget 是事件对象(Event)中两个常用的属性,它们的主要区别在于指向的元素不同。

1. e.target

2. e.currentTarget

属性指向特点
e.target触发事件的具体元素(事件源头)冒泡时始终是最内层实际被点击的元素
e.currentTarget绑定事件监听器的元素与 this 相同,始终是绑定事件的元素,不受冒泡影响

2二、示例说明

假设 HTML 结构如下:

<div id="outer" style="padding: 50px; background: pink;">
  外层元素
  <div id="inner" style="padding: 30px; background: lightblue;">
    内层元素
  </div>
</div>

JS 代码:

const outer = document.getElementById('outer');
outer.addEventListener('click', function(e) {
  console.log('e.target:', e.target.id);      // 实际点击的元素
  console.log('e.currentTarget:', e.currentTarget.id);  // 绑定事件的元素(outer)
  console.log('this:', this.id);              // 与 currentTarget 相同(outer)
});

点击内层元素(inner):

属性
e.targetinner(实际触发事件的元素)
e.currentTargetouter(绑定事件的元素)
thisouter

点击外层元素(outer,非 inner 区域):

属性
e.targetouter
e.currentTargetouter
thisouter
📌 只有点击 inner 时两者才不同:e.target 指向实际点击的 inner,e.currentTarget 指向绑定了监听器的 outer。

3三、总结

✅ e.target:谁触发了事件,就指向谁(事件源头)。e.currentTarget:谁绑定了事件,就指向谁(事件处理器所在的元素)。在事件委托(利用冒泡机制)时,这两个属性的区别尤为重要。例如,通过外层元素代理内层元素的事件时,e.target 可获取具体操作的内层元素,而 e.currentTarget 始终是外层代理元素。