jQuery jQuery事件冒泡与事件委托

在这里插入图片描述
在这里插入图片描述

1、冒泡事件

1、阻止事件冒泡、阻止默认行为、合并阻止操作

代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件冒泡</title>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function () {
            // event 是发生事件的时候的事件对象,使用的时候,通过第一个参数传进来
            $('.son').click(function (event) {
                alert(1);
                // 通过event 对象上的stopPropagation() 的方法阻止事件冒泡
                event.stopPropagation();
            });

            $('.father').click(function () {
                alert(2);
            });

            $('.grandfather').click(function () {
                alert(3);
            });
        });
    </script>

    <style type="text/css">
        .grandfather{
            width: 300px;
            height: 300px;
            background-color: green;

        }

        .father{
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .son{
            width: 100px;
            height: 100px;
            background-color: yellow;
        }

    </style>
</head>
<body>
    <div class="grandfather">
        <div class="father">
            <div class="son">
            </div>
        </div>
    </div>
</body>
</html>

2、合并阻止操作

在这里插入图片描述
在这里插入图片描述
代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>37_时间冒泡_阻止事件冒泡、阻止默认行为合并写法</title>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function () {
            // event 是发生事件的时候的事件对象,使用的时候,通过第一个参数传进来
            $('.son').click(function (event) {
                alert(1);
                return false;
            });

            $('.father').click(function () {
                alert(2);
            });

            $('.grandfather').click(function () {
                alert(3);
            });
        });
    </script>

    <style type="text/css">
        .grandfather{
            width: 300px;
            height: 300px;
            background-color: green;
        }
        .father{
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .son{
            width: 100px;
            height: 100px;
            background-color: yellow;
        }

    </style>
</head>
<body>
    <div class="grandfather">
        <div class="father">
            <div class="son">
            </div>
        </div>
    </div>
</body>
</html>

3、弹框演示

在这里插入图片描述
代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery冒泡事件弹框实例</title>

    <style type="text/css">
        .pop_con{
            display: none;
        }
        .pop{
            position: fixed;
            width: 500px;
            height: 300px;
            background-color: gold;
            border: 3px solid green;

            left: 50%;
            top: 50%;
            margin-left: -250px;
            margin-top: -150px;
            z-index: 9999;
        }
        .mask{
            position: fixed;
            width: 100%;
            height: 100%;
            background-color: pink;
            opacity: 0.3;
            filter: alpha(opacity=30);  /*兼容ie浏览器的写法*/
            left: 0;
            top: 0;
            z-index: 9990;
        }
        #close{
            position: absolute;
            top: 0;
            right: 0;
            background-color: red;
            width: 20px;
            height: 20px;
            font-weight: bold;
            text-align: center;
            line-height: 15px;
            text-decoration: none;
            color: black;
            cursor: pointer;
        }

    </style>

    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $('#btn').click(function () {
                $('.pop_con').fadeIn()
                $('.pop').fadeIn()
                // 阻止事件冒泡
                return false
            })

            $(document).click(function () {
                $('.pop_con').fadeOut()
            })
            $('#info').click(function () {
                $(this).css({'color':'pink'})
                return false
            })

            $('.pop').click(function () {
                // 取消冒泡事件
                return false
            })

            $('#close').click(function () {
                $('.pop').fadeOut()
            })
        })

    </script>

</head>
<body>
    <input type="button" name="" value="弹出" id="btn">


    <div class="pop_con">
        <div class="pop">
            弹框里面文字:
            <input type="text" nam="" value="内容" id="info">
            <a href="#" id="close">x</a>
        </div>

        <div class="mask"></div>

    </div>
</body>
</html>

显示效果如下所示:
在这里插入图片描述

2、事件委托

1、不使用事件委托的写法

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件委托</title>
    <style type="text/css">
        .list{
            background-color: gold;
            list-style: none;
            padding: 10px;
        }
        .list li{
            height: 30px;
            background-color: green;
            margin: 10px;
            cursor: pointer;
        }
    </style>

    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $('.list li').click(function () {
                $(this).css({'backgroundColor':'pink'})
            })
        })
    </script>

</head>
<body>
<!--    ul.list>li{$}*8-->
    <ul class="list">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
    </ul>
</body>
</html>

显示效果如下所示:
在这里插入图片描述

2、使用事件委托的方法实现

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件委托</title>
    <style type="text/css">
        .list {
            background-color: gold;
            list-style: none;
            padding: 10px;
        }

        .list li {
            height: 30px;
            background-color: green;
            margin: 10px;
            cursor: pointer;
        }
    </style>
    <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        /*
        $(function () {
            $('.list li').click(function () {
                $(this).css({'backgroundColor':'pink'})
            })
        })
        * */
        $(function () {
            // 即将事件委托给ul,让ul判断来做什么事情
            $('.list').delegate('li', 'click', function () {
                // $(this) 就是委托的子元素
                $(this).css({'backgroundColor': 'red'})
            })

            // 进行节点操作,添加一个节点(通过事件委托,新加入的li也就具有了点击事件)
            var $li = $('<li>9</li>')
            $('.list').append($li)
        })

    </script>

</head>
<body>
<!--    ul.list>li{$}*8-->
<ul class="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
</ul>
</body>
</html>

显示效果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值