首页 > 其他 > 详细

事件冒泡

时间:2019-06-29 10:10:10      阅读:99      评论:0      收藏:0      [点我收藏+]

事件冒泡和阻止事件冒泡:

  事件冒泡的原理:从实际操作的元素(事件)向上级父元素一级一级执行下去,直到达到document/window,冒泡过程结束。例如:假设我有一个 div 盒子,里面嵌套了1个子元素 p,我要给子元素 p 绑定了onclick事件,如果父元素也绑定了这个相同的事件,当触发子元素(p标签)事件的时候就会触发这个事件并进行冒泡向上传递,也就是父元素 div 也会触发这个事件,父元素的相同事件也会一级一级根据嵌套关系向外触发,直到document/window,冒泡过程结束。下面我用具体的实例来说明一下下,为了大家更方便的看到这个效果,我在标签上添加了一些样式,下面是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        #box {
            width: 200px;
            height: 200px;
            background-color: pink;
        }
        #box1 {
            width: 100px;
            height: 100px;
            margin: 0 auto;
            background-color: purple;

        }
    </style>
</head>

<body>
    <div id="box">
        我是box盒子
        <p id="box1">我是 p 标签</p>
    </div>
</body>
</html>
<script>
    /*
        事件冒泡原理 向上传递
            当后代元素被触发后 其祖先元素也会会触发相同事件

    */ 
    var box = document.getElementById(box);
    var box1 = document.getElementById(box1);
    box1.onclick = function() {
        alert(`我是 p 绑定的事件`);
    }
    box.onclick = function() {
        alert(`我是 div 绑定的事件`);
    }
</script>

在谷歌浏览器中打开后的效果是这样的

技术分享图片

  当鼠标点击 p 标签这个盒子的时候,它会触发自己绑定的onclick事件,并且当这个事件结束之后又会触发 div 标签的点击事件,这时就发生了事件冒泡的现象。

  如何阻止事件冒泡:只需要给冒泡元素函数对象添加一个隐式参数 e 再调用 stopPropagation();这个方法即可阻止事件冒泡。下面是具体代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        #box {
            width: 200px;
            height: 200px;
            background-color: pink;
        }
        #box1 {
            width: 100px;
            height: 100px;
            margin: 0 auto;
            background-color: purple;

        }
    </style>
</head>

<body>
    <div id="box">
        我是box盒子
        <p id="box1">我是 p 标签</p>
    </div>
</body>
</html>
<script>
    /*
        事件冒泡原理 向上传递
            当后代元素被触发后 其祖先元素也会会触发相同事件

    */ 
    var box = document.getElementById(box);
    var box1 = document.getElementById(box1);
    // 阻止事件冒泡 必须要传一个隐式参数 e 
    box1.onclick = function(e) {
        // 阻止冒泡
        e.stopPropagation();
        alert(`我是 p 绑定的事件`);
    }
    box.onclick = function() {
        alert(`我是 div 绑定的事件`);
    }
</script>

事件冒泡

原文:https://www.cnblogs.com/xiaojuziya/p/11105531.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!