e.target和e.currentTarget的区别
最近看代码时候遇到一点困惑,就是target
和currentTarget
的区别,所以记下来,好以后回顾。
MDN中target
:一个触发事件的对象的引用,但事件处理程序在事件的冒泡或捕获阶段时被调用。
MDN中currentTarget
:当事件遍历DOM时,标识事件的当前目标。它总是引用事件处理程序附加到的元素,而不是event.target
,它标识事件发生的元素。
e.target
可以用来实现事件委托
,通过事件冒泡(捕获)给父元素添加事件监听。例子中, e.target
指向用户点击的li
,通过事件冒泡,li
事件冒泡到ul
,通过给ul添加事件达到每个li监听事件的效果,e.currentTarget
指向绑定事件监听的那个对象ul
,e.currentTarget === this
返回true
,e.target===this
返回false
。
当含有子元素的时候,e.target
指的是触发事件的元素,可能是span
也可能是li
,此时的e.currentTarget
指的是selector那个参数,也就是本例中的li
。如果省略selector参数,那么它和addEventListener
中e.target
和e.currentTarget
是一致的。
事件冒泡阶段,e.currenttarget
和e.target
是不相等的,但是在事件的目标阶段,e.currenttarget
和e.target
是相等的。
在本例中,事件的目标阶段即li
,由于e.currentTarget
始终指向添加监听事件的那个对象,即aLi[i]
,也就是HTML中的li
,而e.target
指向触发事件监听的那个对象,也是li
,因此e.target
和e.currentTarget
相等,同时也和this
相等。
总结
e.target
指向触发事件监听的对象。e.currentTarget
指向添加监听事件的对象。