• js中的事件冒泡


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

      事件冒泡的原理:从实际操作的元素(事件)向上级父元素一级一级执行下去,直到达到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>

  • 相关阅读:
    我的浏览器和常用扩展
    Win10安装.Net Framework4.7及更高版本
    压缩和解压工具bandizip
    Oracle trunc()函数的用法
    Oracle 中 decode 函数用法
    Js/Jquery获取iframe中的元素 在Iframe中获取父窗体的元素方法
    String literal is not properly closed by a double-quote eclipse
    linux 启动 Oracle 实例
    查询当前Oracle数据库的实例
    sqlplus 执行 sql 文件
  • 原文地址:https://www.cnblogs.com/xiaojuziya/p/11105531.html
Copyright © 2020-2023  润新知