e.currentTarget与e.target的区别

当一个dom触发被触发一个事件后,事件会冒泡,如果冒泡到父节点,且父节点也绑定相同e.事件的话就会触发该事件。这是可通过e.currentTarget 和 e.target来判断事件的绑定对象和触发对象分别是谁。

 <ul id="fa">
   <li class="son1">son1</li>
   <li class="son2">son2</li>
   <li class="son3">son3</li>
</ul>
let fa = document.getElementById('fa');
fa.onclick = function(e) {
  console.log(`%ccurrentTarget: %c${e.currentTarget.innerHTML}`, 'color: red', 'color: red');
  console.log(`%ctarget: %c${e.target.innerHTML}`, 'color: yellow', 'color:yellow');
}

e.currentTarget与e.target的区别

当点击红色区域相当于在id=fa的节点上触发时间,因此target、currentTarget均指向id=fa节点;

当点击son1、son2、son3时,事件是在子节点触发,但事件是绑定在父节点上,因此currentTarget指向ul节点,target指向li节点,见下图

e.currentTarget与e.target的区别

总结:

e.currentTarget:指的是注册事件对象

e.target:指的是实际触发事件的对象