JavaScript让前端飞Web前端之路

事件及如何阻止事件冒泡

2017-07-30  本文已影响35人  sky丶星如雨

事件是什么?
事件是指,javascript与文档或浏览器发生特定交互的瞬间。
事件分为三个阶段执行:
事件捕获阶段;
处理目标阶段;
事件冒泡阶段;

注意:IE下没有事件捕获阶段,只有处理目标和事件冒泡阶段

event对象 代表当前事件的状态,例如触发event对象的元素、鼠标位置及状态、
按下的按键等等。

什么是冒泡,捕获型事件是自上而下,而冒泡型事件是自下而上的,举个例子

css部分:
<style type="text/css">
            #box1 {
                width: 300px;
                height: 300px;
                background-color: red;
            }
            
            #box2 {
                width: 200px;
                height: 200px;
                background-color: green;
            }
        </style>
html部分:
<div id="box1">
    <div id="box2"></div>
</div>
js部分:
            document.getElementById("box2").onclick = function() {  
                alert("我是box2");
            }

            document.getElementById("box1").onclick = function() {
                alert("我是box1");
            }

            document.body.onclick = function() {
                alert("我是body");
            }

上面的代码大家可以自己去执行以下,我们发现,当点击box2时,不只会弹出“我是box2”,还会继续弹出“我是box1”及“我是body”,这就是事件产生了冒泡,很明显,我们并不希望这样的事情发生,所以,我们需要阻止事件冒泡。

这里就不过多赘述,直接上代码,我们需要用event来监听事件
这里的e,就是监听事件的形参,为了让大家看的更明白,我用上面的例子来做演示

if(e.stopPropagation()) {
                    //非IE的
                    e.stopPropagation();

                } else {
                    //IE阻止冒泡
                    e.cancelBubble();

                }
    document.getElementById("box2").onclick = function(e) {

                //获取event对象
                var e = e || window.event;

                alert("我是box2");

                // 阻止冒泡
                if(e.stopPropagation()) {
                    //非IE的
                    e.stopPropagation();

                } else {
                    //IE阻止冒泡
                    e.cancelBubble();

                }

            }


此时,阻止了事件冒泡,再点击box2时,就只会弹出“我是box2”。

上一篇下一篇

猜你喜欢

热点阅读