event.target与event.currentTarget的差异(完整版)
1.什么是target?什么是currentTarget?
event.target 是发生事件的元素或触发事件的元素。
event.currentTarget 是我们在其上显式附加事件处理程序的元素。(是事件绑定的元素)
2.target和currentTarget的区别:
-
target:触发事件的元素。
-
currentTarget:事件绑定的元素。
-
两者在没有冒泡的情况下,是一样的值,但在用了事件委托的情况下event.target指向引起触发事
件的元素,而event.currentTarget则是事件绑定的元素。 -
小结:currentTarget始终是监听事件者,绑定谁就是谁,而target是事件的真正发出者,点谁就是
谁。
一、针对部分监听事件,例如onclick:
1、如果你点击的是添加事件元素的子元素,就用currentTarget来获取父元素的值,用target来获取
子元素的值;
2、如果没有子元素,就在本元素上添加事件,target和currentTarget效果一样。
二、针对部分监听事件,例如onmouseenter:
1、如果你点击的是添加事件元素的子元素。使用currentTarget或者target都是获取父元素的值;
2、如果没有子元素,就在本元素上添加事件,target和currentTarget效果都是获取到自身元素的
值。
三、针对部分监听事件(比如onclick):
target指向的是事件触发事的元素。
target在事件流的目标阶段,没有事件流的捕获和冒泡。点击始终是指向被单击的对象
currentTarget指向事件绑定的元素。
当事件流处在目标阶段的时候(就是点击当前事件绑定对象),指向被单击的对象
当处于捕获和冒泡阶段的时候,指向当前事件活动的对象(一般为父级)。
什么时候使用target和currentTarget?
1.target在事件流的目标阶段
当事件流处在目标阶段的时候(就是点击当前事件绑定对象),指向被单击的对象
当需要获取不同子组件绑定的属性,比如点击某个组件拿到该组件上绑定的属性,可以使用
event.target
2 . currentTarget在事件流的捕获,目标及冒泡阶段。
当事件流处在目标阶段的时候(就是点击当前事件绑定对象),指向被单击的对象
当处于捕获和冒泡阶段的时候,也是指向当前事件绑定的对象。
始终都可以找到当前绑定事件的对象,所以开发人员一般使用event.currentTarget属性,event.target
属性很少使用
一般情况下,建议只使用 currentTarget 对象,因为它能拿到我们想要的参数属性
如果我们需要获取不同子组件绑定的属性,比如点击某个组件拿到该组件上绑定的属性,才用 target 对 象
4.current的不足:
通过查询MDN了解到,currentTarget在Safari on iOS10.0以下的版本中兼容性较差。