事件冒泡与事件捕获

146 阅读1分钟

事件伊始


当年 IE 与 网景 争浏览器一哥,对JS的事件触发顺序 都有着自己的理解,IE 认为,在一个多层嵌套的容器中,点击某个子容器,应该先触发这个子容器的事件(事件冒泡),网景则刚好相反,网景认为应该触发父容器的事件,再让父容器去触发子容器的事件(事件捕获),双方都争执不下,开发人员面对两种不同的方案欲哭无泪,后面 W3C 组织就做和事佬,说两方的想法都很有道理,那我们就都用吧,于是我们用 addEventListener 时,可以传递第三个参数,是一个布尔值,默认为 false ,即在事件冒泡时触发事件


事件冒泡触发顺序


子元素 --> 父元素 --> body


事件捕获触发顺序


body --> 父元素 --> 子元素


事件监听/事件委托


事件触发时会有一个事件对象,这个事件对象会冒泡到父元素, 父元素可以通过这个事件对象,知道是哪个子元素触发的事件

<ul id='father'>
    <li>1</li>
        <li>2</li>
        <li>3</li>
        <div>4</div>
</ul>

let ul = document.getElementById('father');

ul.addEventListener('click' , function(e){
        console.log(e.target)
},false);

当我们需要给很多个元素设置事件时,给每一个元素设置事件会非常繁琐,而且如果后面要往里面插入新的元素的话,还得给新增的元素添加事件,我们在他们的父元素上设置一个监听事件,通过传入的事件对象触发子元素的事件,而且后续新增的元素也可以被监听到