前端|event.target与event.currentTarget的区别

简介: 前端|event.target与event.currentTarget的区别

前言

event.target事件和event.currentTarget事件,经常被人们混淆。因为它们两个有时候的返回值是完全一样的,因此很具有迷惑性。然而如果真的是一样的,那当初官方就不会做这样没有意义的事了。下面我就结合我所学的知识来给大家讲一下,这两者的区别。

定义

Event.target:返回触发事件的元素;

Event.currentTarget:返回绑定事件的元素。

解释

我写了两个简单的demo,结合这两个demo,大家马上就可以理解它们二者的区别在哪里。

<body>

              <div  id="bai" style="background-color: #CC5522;

              width:  12.5rem;height: 12.5rem;">

                     <a  href="" style="background-color: cadetblue;">点击一下</a>

              </div>

       </body>

       <script  type="text/javascript">

              var  bai = document.getElementById("bai");

              bai.onclick  = function(event) {   

                     var  tar = event.target;

                     var  tagName = tar.nodeName.toLowerCase();

                     alert("触发事件的元素是:" + tagName);

/* 当我点击a标签的时候,网页就会提醒我“触发事件的元素是:a”;

                     当我点击外层div标签的时候,网页则会提醒我“触发事件的元素:div”。*/

              }

我们接着看第二个demo:

<body>

              <div  id="bai" style="background-color: #CC5522;

              width:  12.5rem;height: 12.5rem;">

                     <a  href="" style="background-color: cadetblue;">点击一下</a>

              </div>

       </body>

       <script  type="text/javascript">

              var  bai = document.getElementById("bai");

              bai.onclick  = function(event) {   

                     alert("被点击了");

         /* 无论我点击里面的a标签还是外层的div标签,

网页给我的提示都是“被点击了” */

       }

对比一下两个demo,不难发现,我都是将点击事件绑定在div上面的,但是在第一个demo里面我是利用的target事件返回的被点击的标签的名称。而在第二个demo里面,我仅仅让点击事件返回“被点击了”。而无论是不是直接点击的div,点击事件都会被发起。


所以当div里的a标签被点击时,也就是当我们用鼠标点击了div内的这个超链接时,这个被我们点击的a标签就是触发事件的标签了,也就是event.target;而整个点击事件是绑定在div上的,所以不管点击了哪里,这个div都是事件的发起者,即就是event.currentTarget。

不知道大家是否明白了呢?

目录
相关文章
|
1月前
|
监控 前端开发 JavaScript
前端工程化和传统前端开发的区别是什么?
前端工程化相比传统前端开发,在开发模式、代码组织与管理、构建与部署流程、团队协作、性能优化以及技术选型等方面都有了显著的改进和提升,能够更好地应对现代前端应用开发的复杂性和高要求。
|
4月前
|
前端开发 UED 开发者
颠覆你的前端知识:防抖与节流的区别及实战解析!
【8月更文挑战第23天】在Web前端开发中,处理用户界面交互产生的事件可能会影响性能。为此,我们有两种优化方法:防抖(debounce)和节流(throttle)。防抖确保函数仅在事件停止触发一段时间后执行一次,适用于如搜索自动补全场景。而节流则确保函数按固定时间间隔执行,不管用户操作频率如何。本篇技术博客将深入解析两者差异并提供示例代码,帮助开发者更好地理解和应用这些技巧以提升应用性能和用户体验。
90 0
|
2月前
|
JavaScript 前端开发 应用服务中间件
Vue开发中,在实现单页面应用(SPA)前端路由时的hash模式和history模式的区别及详细介绍
Vue开发中,在实现单页面应用(SPA)前端路由时的hash模式和history模式的区别及详细介绍
43 0
|
2月前
|
存储 前端开发 API
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
119 0
|
4月前
|
前端开发 Java 编译器
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
49 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)
|
6月前
|
XML 存储 前端开发
【前端】XML和HTML的区别详解
【前端】XML和HTML的区别详解
152 5
|
6月前
|
存储 缓存 资源调度
你真的知道 NPM、Yarn 与 PNPM 这三个前端包管理器之间的区别吗?
【6月更文挑战第9天】NPM、Yarn和PNPM是主流前端包管理器,各有特色。NPM生态庞大,易用但速度慢;Yarn速度快,依赖管理稳定;PNPM性能优异,节省磁盘空间。Yarn和PNPM在速度和确定性上胜出,NPM因广泛使用和丰富资源领先。开发者可根据项目需求和喜好选择,三者共同推动前端开发进步。
160 8
|
6月前
|
JSON 前端开发 JavaScript
前端Ajax、Axios和Fetch的用法和区别笔记
前端Ajax、Axios和Fetch的用法和区别笔记
118 2
|
7月前
|
存储 前端开发 索引
【Web 前端】ES6中,Set和Map的区别 ?
【5月更文挑战第1天】【Web 前端】ES6中,Set和Map的区别 ?
|
7月前
|
存储 前端开发 JavaScript
【Web 前端】JS数据类型有哪些?区别?
【4月更文挑战第22天】【Web 前端】JS数据类型有哪些?区别?
下一篇
DataWorks