事件捕获&冒泡

90 阅读1分钟

事件冒泡

多个元素嵌套,这些元素都注册了相同的事件,如果里面的元素的事件触发了,外面的元素的该事件也自动触发了。

<div id="dv1">1
            <div id="dv2">2
                <div id="dv3">3</div>
            </div>
        </div>
        <script src="js/common.js"></script>
        <script type="text/javascript">
            my$('dv1').onclick=function(){
                console.log("点击dv1");
            };
            my$('dv2').onclick=function(){
                console.log("点击dv2");
            };
            my$('dv3').onclick=function(){
                console.log("点击dv3");
            };
        </script>

如何阻止事件冒泡

window.event.cancelBubble=true;
 e.stopProgation()`;

事件阶段

事件冒泡是从里到外,事件有三个阶段:

通过e.eventPhase这个属性可以知道当前的事件是什么阶段
1--->捕获阶段
事件捕获阶段:从外向内
2--->目标阶段
事件目标阶段:最开始选择的
3--->冒泡阶段
事件冒泡阶段:从里向外

addEventListener("没有on的事件类型",事件处理函数,控制事件阶段的)

事件捕获

当鼠标点击或者触发dom事件时,浏览器会从根节点开始由外到内进行事件传播,即点击了子元素,如果父元素通过事件捕获方式注册了对应的事件的话,会先触发父元素绑定的事件。

//addEventListener 有三个参数

IE5*:baba.attachEvent('onclick',fn)//冒泡
网景:baba.attachEventListener('onclick',fn)
W3C: baba.attachEventListener('onclick',fn,bool)

                //第一个是 事件名

                //第二个是 函数方法

                //第三个是 布尔值  

(判断是事件冒泡还是事件捕捉默认是falsy true 是事件捕捉  false 是事件冒泡)