e.target 和 e.currentTarget 的区别

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

1. e.target

  • 定义 :指向触发事件的具体元素(事件的实际发源地)。
  • 特点 :如果事件经过了冒泡,e.target 始终是最内层的、实际被点击(或触发)的元素。

2. e.currentTarget

  • 定义 :指向当前正在处理事件的元素(即绑定了事件监听器的元素)。
  • 特点 :与 this(在普通函数中)指向相同,始终是绑定事件的那个元素,不受事件冒泡影响。

示例说明

假设 HTML 结构如下:

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

JS 代码:

javascript 复制代码
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.target → inner(实际触发事件的元素)
    • e.currentTarget → outer(绑定事件的元素)
    • this → outer
  • 点击外层元素(outer,非 inner 区域) :

    • e.target → outer
    • e.currentTarget → outer
    • this → outer

总结

  • e.target:谁触发了事件,就指向谁(事件源头)。

  • e.currentTarget:谁绑定了事件,就指向谁(事件处理器所在的元素)。

在事件委托(利用冒泡机制)时,这两个属性的区别尤为重要。例如,通过外层元素代理内层元素的事件时,e.target 可获取具体操作的内层元素,而 e.currentTarget 始终是外层代理元素。

相关推荐
爱喝水的小周7 小时前
实验十 Vue‑Router 王者荣耀战绩查询 APP 开发实践
前端·javascript·vue.js
yexianglunbai7 小时前
Vue 3 全面详解:从核心特性到工程化实践
前端·javascript·vue.js
传人once7 小时前
选择文件按钮样式如何美化
前端·html·css3·jquery·html5
parade岁月7 小时前
告别 Deno 时代?运行时进入一年倒计时,Deno 团队并入 Cloudflare
前端
Lucky_Turtle7 小时前
【HTML】前端页面禁止缩放
前端·html
恋猫de小郭7 小时前
Genkit Dart 1.0 发布,Flutter 原生的 AI Agent 终于完整了
android·前端·flutter
思码梁田8 小时前
CSS transform 转换详解:translate、rotate、scale、skew 与 3D 变换一次讲清
前端·css·transform·skew·scale·translate·rotate
第10086个小白8 小时前
flutter桌面端打包方式(Inno Setup Compiler)版本
前端·flutter
派小心.8 小时前
多端数据分析平台的漏斗可以跨端搭建吗?5 步搭出跨端转化漏斗
大数据·运维·服务器·前端·数据分析
IT_陈寒8 小时前
为什么我的React组件一直在意外重渲染?
前端·人工智能·后端