zoukankan      html  css  js  c++  java
  • 事件冒泡

      当我们通过jQuery或者是js为某个元素绑定了一个事件或者添加了一个事件监听之后,通过特定的行为会触发该事件,然后执行相应的事件处理函数,但是函数执行之后,事件并没有结束,而会向他的外层元素冒泡,直到最外层元素,这就是事件冒泡,事件捕获与事件冒泡相反,是从最外层元素向里。

      可能描述的不是很清楚,下面用一段代码来解释事件冒泡

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <script src="../jquery-3.2.1.min.js"></script>
        <style>
            div {
                border:1px solid #ccc;
                margin:10px auto;
            }
            .d1 {
                width: 300px;
                height: 300px;
            }
    
            .d2 {
                width: 200px;
                height: 200px;
            }
            .div3 {
                width: 100px;
                height: 100px;
            }
    
        </style>
    </head>
    <body>
        <div class="d1">
            <div class="d2">
                <div class="div3">this is div3</div>
            </div>
        </div>
    </body>
    <script>
       $(function () {
           $(".d1").click(function(){
               alert("thi is d1");
           });
           $(".d2").click(function(){
               alert("this is d2");
           });
           $(".div3").click(function(){
               alert("this is div3");
           });
       })
    </script>
    </html>

      首先定义了三个div,这里通过jQuery为三个div都加上了click鼠标点击事件,这段代码的目的是当点击其中的一个div标签时,会弹出相应的内容,当点击div3时,会显示this is div3

    这是我们希望看到的结果,但是事实证明,当我们关闭了这个对话框之后还会弹出另外两个对话框

    我只点击了div3,但是外层的两个div的click事件都触发了,这是因为click事件在向上传递,作为父亲和爷爷的div2和div1也会收到该事件,并触发自己的事件处理函数,这就是所谓的事件冒泡。

    那么我们知道了什么是事件冒泡,该怎么阻止它呢,最简单的方法就是通过event对象的stopPropagation(),该方法会在指定的位置来阻止事件继续向上冒泡。

     $(".div3").click(function(){
               alert("this is div3");
               event.stopPropagation()
           });

    我们在div3中插入了一行代码,调用了event的stopPropagation方法,再次执行时,点击div3只会弹出一个对话框,关闭之后不会再产生其他的对话框,

      

  • 相关阅读:
    js处理富文本编辑器转义、去除转义、去除HTML标签
    web sec tools / Arachni
    OS + Linux IP / Inside IP / Outside IP
    OS + Linux SMB / Samba
    OS + Linux NTP Server
    my live / PC NAS / weiliantong QNAP TS-532X 4.5.1.1495 / cipanzhenlie / raid / Synology
    summarise() regrouping output 警告
    binary_crossentropy和BinaryCrossentropy的区别
    损失函数BinaryCrossentropy例子说明
    理解功能强大的sed替换命令
  • 原文地址:https://www.cnblogs.com/Hlong-ZY/p/7261094.html
Copyright © 2011-2022 走看看