target在事件流的目标阶段;

currentTarget在事件流的捕获,目标及冒泡阶段。只有当事件流处在目标阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,

target指向被单击的对象

currentTarget指向当前事件活动的对象(一般为父级)。

冒泡和捕获

当点击页面的一个元素的时候,事件会从这个元素的祖先元素逐层传递下来,这个过程成为事件捕获;当事件传递到这个元素之后,又会把事件逐成传递回去,直到根元素为止,这个阶段是事件的冒泡阶段

事件捕获
事件冒泡

我们为一个元素绑定一个点击事件的时候,可以指定是要在捕获阶段绑定或者换在冒泡阶段绑定。 当addEventListener的第三个参数为true的时候,代表是在捕获阶段绑定,当第三个参数为false或者为空的时候,代表在冒泡阶段绑定。

知道事件有这么一个穿透的过程之后,结合下面的例子,就可以很好来理解event.targetevent.currentTarget

<body><div id="a"><div id="b"><div id="c"><div id="d"></div></div></div></div><script>document.getElementById('a').addEventListener('click', function ( e ) {console.log('target:' + e.target.id + '&currentTarget:' + e.currentTarget.id);});document.getElementById('b').addEventListener('click', function ( e ) {console.log('target:' + e.target.id + '&currentTarget:' + e.currentTarget.id);});document.getElementById('c').addEventListener('click', function ( e ) {console.log('target:' + e.target.id + '&currentTarget:' + e.currentTarget.id);});document.getElementById('d').addEventListener('click', function ( e ) {console.log('target:' + e.target.id + '&currentTarget:' + e.currentTarget.id);});</script>
</body>
复制代码

处于冒泡阶段

    //点击d元素的时候;target:d&currentTarget:d    // d触发target:d&currentTarget:c    // c触发target:d&currentTarget:b    // b触发target:d&currentTarget:a    // a触发
复制代码

从输出中我们可以看到,event.target指向引起触发事件的元素,而event.currentTarget则是事件绑定的元素,只有被点击的那个目标元素的event.target才会等于event.currentTarget

将上述<script>标签里的事件绑定的第三个参数设置为true时,事件处于捕获阶段,然后还是点击最里层的元素d,这时event.target还依旧会指向d,因为那是引起事件触发的元素,因为event.currentTaget指向事件绑定的元素,所以在捕获阶段,最先来到的元素是a,然后是b,接着是c,最后是d。所以输出的内容如下:

处于捕获阶段

    target:d&currentTarget:a    // a触发target:d&currentTarget:b    // b触发target:d&currentTarget:c    // c触发target:d&currentTarget:d    // d触发
复制代码

转载于:https://juejin.im/post/5a9bac73f265da238c3a221a

currentTarget VS target相关推荐

  1. js中的target与currentTarget的区别转

    关于js中target与currentTarget的区别的关键在于他们所处在的事件流的阶段是不一样的,target处于事件流的目标阶段,currentTarget处理事件流的捕获.处于目标阶段和冒泡阶 ...

  2. event.target与event.currentTarget的差异

    event.target与event.currentTarget的差异(完整版) 1.什么是target?什么是currentTarget? event.target 是发生事件的元素或触发事件的元素 ...

  3. 2016 实习招聘面试经历 - 2

    文章写于 2016 年,旧的博客不维护了,一些文章直接迁移到这边来.现在看当时自己还是很青涩的哈哈,不管是文笔还是前端.文章的第二篇,记得应该是阿里的二面 Angular双向绑定的实现 嗯-面试三次, ...

  4. 实现点击空白关闭模态框

    监听document,当用户点击后,获取点击的id,如果id不是modal则关闭modal 当然还需要注意的是要阻止modal的冒泡事件,不然modal一弹出来之后就又关闭了. 停止冒泡 $(&quo ...

  5. 读javascript高级程序设计11-事件

    一.事件流 事件流指从页面中接收事件的顺序. 1.事件冒泡(常用) IE中采用的事件流是事件冒泡,先从具体的接收元素,然后逐步向上传播到不具体的元素. 2.事件捕获(少用) Netscapte采用事件 ...

  6. JavaScript学习 九、事件

    JavaScript 与 HTML 之间的交互是通过事件实现的.事件,就是文档或者浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(或处理程序)来预定事件,以便事件发生时执行相应的代码.类似于设计 ...

  7. Android微信小程序原理,微信小程序事件流原理解析

    这篇文章主要介绍了微信小程序事件流原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.什么是事件? 事件是视图层到逻辑层的通讯方式: 事件可 ...

  8. 实战SSM_O2O商铺_37【商品】商品列表之View层的实现

    文章目录 概述 productmanagement.html productmanage.css productmanage.js 联调 Github地址 概述 在完成了后端的逻辑后,我们来实现商品列 ...

  9. JavaScript事件使用指南

    事件流 事件流描述的是从页面中接收事件的顺序,IE和Netscape提出来差不多完全相反的事件流的概念,IE事件流是事件冒泡流,Netscape事件流是事件捕获流.事件冒泡 IE的事件流叫做事件冒泡, ...

最新文章

  1. 用VS.NET中的测试工具测试ASP.NET程序
  2. php实现tcp连接esp8266,ESP8266之TCP透传
  3. 使用.NET,郁闷之余,写下的废话
  4. Monte Carlo概率模型进行分子动力学模拟并计算苯甲醚键值
  5. [Ubuntu] 解决 pip 安装 lxml 出现 x86_64-linux-gnu-gcc 异常
  6. InvocationHandler的invoke方法如何被调用?
  7. 逛画展(单调队列) acm寒假集训日记22/1/1
  8. 顺丰同城:拟通过香港IPO发行1.31亿股H股 预期将于12月14日在港交所上市
  9. html中如何计算图片的像素,html – 浏览器的1px计算问题(子像素问题)
  10. 【1】测试用例设计-测试用例概述
  11. 软考【网络工程师】(上午经典例题——软件项目活动图 详解)
  12. 随机分组c语言,用C/C++进行随机分组的实现教程,分组教程
  13. VisualBasic程序设计第二章的学习与自测
  14. Android入门之——百度地图开发(二)定位当前位置
  15. C语言题目:5-6 购物(一) (25 分)
  16. Bill Gates和Elon Musk推荐,人工智能必读的三本书 -《终极算法》,《超级智能》和《终极发明》
  17. noi国家集训队论文分类
  18. linux查看文件打开限制,Linux最大文件打开数使用经验详解
  19. vue-echarts数据统计图表展示
  20. MySQL插入数据时报错Cause: java.sql.SQLException: #HY000

热门文章

  1. SpringCloudAlibaba+Redis+MQ+MySQL+高德“网约车”项目!(含APP端)
  2. 手游扫码登录教程及其原理(王者荣耀)
  3. 这款2500万用户的在线便利贴,被4.25亿美元收购,还顺手定义了看板管理
  4. 宁波打响“外卖保卫战” 祭出“黑科技”实现精准监管
  5. Vue中ECharts配置和使用自定义主题(超简单,包教会)
  6. Macrorit Partition Expert v5.7.0 硬盘分区管理软件单文件中文版
  7. 最新CI框架PHP漫画小说二合一CMS网站系统源码+内附教程
  8. 山东大学创新项目实训个人工作日志(一)
  9. 应用负载均衡之LVS(一):基本概念和三种模式
  10. html插入地图的方法,JavaScript接入百度地图API的方法步骤