给父元素parent添加一个点击事件后,当点击parent区域后,会得到事件源,然而父元素的子元素还有元素,并且还占满父元素。问题:当我点击parent区域时,怎么让事件源是子元素,而不是孙子元素。
<div class="parent">
<div class="chlid">
<div class="grandson"></div>
<div class="grandson"></div>
<div class="grandson"></div>
...
</div>
<div class="chlid">
<div class="grandson"></div>
<div class="grandson"></div>
<div class="grandson"></div>
...
</div>
<div class="chlid">
<div class="grandson"></div>
<div class="grandson"></div>
<div class="grandson"></div>
...
</div>
...
</div>
<script>
let parent = document.querySelector(".parent");
parent.addEventListener("click",function(e){
e = e || window.event;
let target = e.target;
// 怎么回回点击parent区域 等得到的事件源还是 div.child?
},false)
</script>
事件永远发生在真实的位置上,点了里面的元素就是点了里面的元素。只不过你的事件监听实在父元素上。试想一下,如果在父元素绑定事件监听,不管点里面哪一个元素,都认为事件源是父元素,那怎么做事件代理。
用颜色标注一下:

点绿色的部分事件源就是grandson,红色部分就是child,蓝色部分就是parent