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

    #转载请留言联系

    • 什么是事件冒泡?

    事件冒泡,指代在js中,被包含的子标签一旦触发了某种事件,那么父元素的同名事件也会被逐层触发,一直到没有父标签的html标签中。

    • 事件冒泡示例

    创建一个大的框框,背景色为绿色。然后在大框框里创建一个小框框,背景色为红色。需求是当点大框框的内容时,大框框的背景色变成蓝色。当点小框框的内容时,小框框的背景色变成蓝色。

    代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .bigbox{
                width: 500px;
                height: 500px;
                background: green;
            }
            .littlebox{
                width: 200px;
                height: 200px;
                background: red;
            }
        </style>
        <script src="js/jquery-1.12.4.min.js"></script>
        <script>
            $(function(){
                $('.bigbox').on('click',function(event){
                    $(this).css({"background":"blue"});
                })
                $('.littlebox').on('click',function(event){
                    $(this).css({"background":"blue"});
                })
            })
        </script>
    </head>
    <body>
        <div class="bigbox">
            <div class="littlebox"></div>
        </div>
    </body>
    </html>

    实验:当点击大框框时,背景颜色的确变成蓝色了,而且小框框的背景色保持不变,还是红色。但是!当点击小框框时,大框框小框框的背景颜色都变成蓝色了!这边是事件冒泡。子标签一旦触发了某种事件,那么父元素的同名事件也会被逐层触发,一直到没有父标签的html标签中。

    • 阻止事件冒泡

    1.event.target

    target 事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素、文档或窗口。

    示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .bigbox{
                width: 500px;
                height: 500px;
                background: green;
            }
            .littlebox{
                width: 200px;
                height: 200px;
                background: red;
            }
        </style>
        <script src="js/jquery-1.12.4.min.js"></script>
        <script>
            $(function(){
                $('.bigbox').on('click',function(event){
                    $(event.target).css({"background":"blue"});
                })
                $('.littlebox').on('click',function(event){
                    $(event.target).css({"background":"blue"});
                })
            })
        </script>
    </head>
    <body>
        <div class="bigbox">
            <div class="littlebox"></div>
        </div>
    </body>
    </html>

    2.return false

    示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .bigbox{
                width: 500px;
                height: 500px;
                background: green;
            }
            .littlebox{
                width: 200px;
                height: 200px;
                background: red;
            }
        </style>
        <script src="js/jquery-1.12.4.min.js"></script>
        <script>
            $(function(){
                $('.bigbox').on('click',function(event){
                    $(this).css({"background":"blue"});
                })
                $('.littlebox').on('click',function(event){
                    $(this).css({"background":"blue"});
                    return false;
                })
            })
        </script>
    </head>
    <body>
        <div class="bigbox">
            <div class="littlebox"></div>
        </div>
    </body>
    </html>

    3.stopPropagation

    示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .bigbox{
                width: 500px;
                height: 500px;
                background: green;
            }
            .littlebox{
                width: 200px;
                height: 200px;
                background: red;
            }
        </style>
        <script src="js/jquery-1.12.4.min.js"></script>
        <script>
            $(function(){
                $('.bigbox').on('click',function(event){
                    $(this).css({"background":"blue"});
                })
                $('.littlebox').on('click',function(event){
                    $(this).css({"background":"blue"});
                    event.stopPropagation()
                })
            })
        </script>
    </head>
    <body>
        <div class="bigbox">
            <div class="littlebox"></div>
        </div>
    </body>
    </html>
    • 事件冒泡的意义

    那么,事件冒泡有什么意义呢?还只是一个累赘?其实事件冒泡大有用处!

    在某种特殊场合下,我们可以通过给父元素添加事件,可以减少批量对子元素添加事件的性能消耗。例如,我们一个ul里面由5000个li,给每一个li添加事件,和给一个ul添加事件,性能的差距是5000倍!

    示例(当点击标题是背景变成蓝色,其他标签变回底色):

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="js/jquery-1.12.4.min.js"></script>
        <script>
            $(function(){
                $('.list').on('click',function(event){
                    $(event.target).css({"background":"blue"}).siblings().css({"background":"white"});
                })
            })
        </script>
    </head>
    <body>
        <ul class="list">
            <li>第一个标题</li>
            <li>第二个标题</li>
            <li>第三个标题</li>
            <li>第四个标题</li>
            <li>第五个标题</li>
        </ul>
    </body>
    </html>
  • 相关阅读:
    开源一个常用的小软件的源码——系统数据库服务管理软件
    MySql Windws 下自动备份脚本
    ubuntu-14.04-server配置Jexus --安装步骤记录
    Jumony快速抓取网页 --- Jumony使用笔记--icode
    视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
    收录.NET跨平台及跨数据库的博文...
    ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
    Windbg程序调试系列
    QCY蓝牙耳机 左右两只耳机配对 方法
    wpf 的 Window或UserControl绑定自己后台属性
  • 原文地址:https://www.cnblogs.com/chichung/p/9714459.html
Copyright © 2011-2022 走看看