js事件冒泡机制及解决办法

版权声明:原创 https://blog.csdn.net/rambler_designer/article/details/88943466

js事件冒泡

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件冒泡</title>
    <script src="js/jquery3.3.1.js"></script>
</head>
<body>
<div class="btn1">
    <h2 class="btn2">
        <a class="btn3">a</a>
    </h2>
</div>
<script>
    $(window).ready(function () {
        $(".btn1").click(function () {
            console.log($(this).val() + "触发事件");
        });
        $(".btn2").click(function () {
            console.log($(this).val() + "触发事件")
        });
        $(".btn3").click(function () {
            console.log($(this).val() + "触发事件");
        });
    });
</script>
</body>
</html>

效果:

分析:

当点击了a标签之后,发现有三行输出,这就是事件的冒泡机制,当点击了a标签,事件会向上冒泡,也就是a的父元素为li,自动触发了li绑定的事件,然后事件在继续往上冒泡,li的父标签div也触发了事件,这就是三次事件的原因

解决方法:

方法一、

在绑定的事件中注入js对象event,event调用stopPropagation();取消冒泡机制,取消li标签冒泡也是同理

<script>
    $(window).ready(function () {
        $(".btn1").click(function () {
            console.log($(this).val() + "触发事件");
        });
        $(".btn2").click(function () {
            console.log($(this).val() + "触发事件")
        });
        $(".btn3").click(function (event) {
            console.log($(this).val() + "触发事件");
            event.stopPropagation();
        });
    });
</script>

方法二、

我觉得这个是没啥用的,就是在btn绑定的事件函数体第一行输入return false;

这里的return false,也就是忽略当前函数的语句,直接退出当前函数

如果我给div也绑定了事件,再点击div就不会触发函数

而如果只是取消冒泡,点击div还是会触发函数

效果:

猜你喜欢

转载自blog.csdn.net/rambler_designer/article/details/88943466