• JavaScript | 阻止事件冒泡


    1. 事件冒泡:

    点击 子级 也出现了 父级容器 相关的事件。

    【注】和相对位置无关(不管子级和父级是否重叠都有可能会出现冒泡现象,如下图1、图2),只和包含关系有关(可以理解为子级也属于父级的一部分)。

    【图1】

     【图2】

    2. 解决方法

    【法1】给 子级 赋予 ev.stopPropagation()

      propagation ---- n. 传播;扩展

    【法2】给 子级 赋予 ev.cancelBubble = true

    3. 测试代码

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" >
     6     <title>随堂</title>
     7 
     8     <style type="text/css">
     9         * {
    10             margin: 20px;
    11             padding: 0;
    12             list-style: none;
    13         }
    14 
    15         #div1 {
    16             position: relative;
    17             width: 200px;
    18             height: 200px;
    19             background: #FFCC33;
    20             color: #333366;
    21             text-align: center;
    22             vertical-align: middle;
    23         }
    24 
    25         #div2 {
    26             position: absolute;
    27             left: 300px;
    28             top: 300px;
    29             width: 50px;
    30             height: 50px;
    31             background: #FFFFCC;
    32             color: #333366;
    33             text-align: center;
    34             vertical-align: middle;
    35         }
    36 
    37 
    38     </style>
    39 </head>
    40 <body>
    41     <div id="div1">父级容器
    42         <div id="div2">子级</div>
    43     </div>
    44 
    45 
    46     <script type="text/javascript">
    47         
    48         div1.onclick = function(){
    49             alert(1);
    50         }
    51 
    52         // 【法1 --- stopPropagation】
    53         // 不要漏掉事件参数 ev
    54         div2.onclick = function(){
    55             ev.stopPropagation();
    56         }
    57 
    58         // 【法2 --- cancelBubble】
    59         // 不要漏掉事件参数 ev
    60         div2.onclick = function(ev){
    61             ev.cancelBubble = true;
    62         }
    63     </script>
    64 
    65 </body>
    66 </html>

    -------------------------------------------------------------------------------------------------

    Reference

    1. https://www.w3school.com.cn/jsref/event_stoppropagation.asp

  • 相关阅读:
    SQL Sever 各版本下载
    使用REPLACE更新某表中某个字段详细内容【SQL语句】
    常用css简写
    CSS hack:区分IE6,IE7,IE8,firefox
    浅析vue中的provide / inject 有什么用处
    Git常用命令总结
    ts
    学会使用Vue JSX,一车老干妈都是你的
    关于javascript的Object. hasOwnProperty,看我就够了
    JavaScript进阶笔记(七):异步任务和事件循环
  • 原文地址:https://www.cnblogs.com/binaryguy/p/14764890.html
Copyright © 2020-2023  润新知