美文网首页
事件冒泡(阻止冒泡)和事件捕捉(阻止捕获)

事件冒泡(阻止冒泡)和事件捕捉(阻止捕获)

作者: _Miss_Chen | 来源:发表于2019-05-15 21:26 被阅读0次

很多朋友私聊问我怎么阻止事件冒泡,不懂事件冒泡和事件捕捉的童鞋看过来了,小编今天就来给大家讲解一下。

我们先来简单看一下原理

原理 :

DOM事件流(event flow ):
存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。

事件冒泡(event capturing) :
当一个元素接收到事件的时候 会把他接收到的事件传给自己的父级,一直到window 。(注意这里传递的仅仅是事件 并不传递所绑定的事件函数。所以如果父级没有绑定事件函数,就算传递了事件 也不会有什么表现 但事件确实传递了。)

事件捕获(event capturing):
当鼠标点击或者触发dom事件时,浏览器会从根节点开始由外到内进行事件传播,即点击了子元素,如果父元素通过事件捕获方式注册了对应的事件的话,会先触发父元素绑定的事件。

事件冒泡

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #a{
                width: 100px;
                height: 100px;
                background: red;
            }
            #b{
                width: 50px;    
                height: 50px;
                background: green;
            }
        </style>
    </head>
    <body>
        <div id='a'>
            <div id='b'>
                <p id="p">111</p>
            </div>
            
        </div>
    </body>
    <script type="text/javascript">
        var a=document.getElementById('a');
        var b=document.getElementById('b');
        var p=document.getElementById('p');
        a.onclick=function(){
            alert('a')
        }
        b.onclick=function(){
            alert('b')
    
        }
        p.onclick=function(){
            alert('p')
        }
        
    </script>
</html>

这是事件冒泡,一共会弹出三次
第一个会弹出 a
第二个会弹出 b
第三个会弹出 c

//阻止事件冒泡
event.stopPropagation()

阻止事件冒泡

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #a{
                width: 100px;
                height: 100px;
                background: red;
            }
            #b{
                width: 50px;    
                height: 50px;
                background: green;
            }
        </style>
    </head>
    <body>
        <div id='a'>
            <div id='b'>
                <p id="p">111</p>
            </div>          
        </div>
    </body>
    <script type="text/javascript">
        var a=document.getElementById('a');
        var b=document.getElementById('b');
        var p=document.getElementById('p');
        a.onclick=function(){
            alert('a')
        }
        b.onclick=function(){
            alert('b')
    //阻止事件冒泡
            event.stopPropagation()
        }
        p.onclick=function(){
            alert('p')
        }
        
    </script>
</html>

这样就可以阻止事件冒泡
会弹出两次
第一个会弹出 a
第二个会弹出 b
阻止了 c 的弹出

事件捕获

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #a{
                width: 100px;
                height: 100px;
                background: red;
            }
            #b{
                width: 50px;    
                height: 50px;
                background: green;
            }
        </style>
    </head>
    <body>
        <div id='a'>
            <div id='b'>
                <p id="p">111</p>
            </div>
            
        </div>
    </body>
    <script type="text/javascript">
        var a=document.getElementById('a');
        var b=document.getElementById('b');
        var p=document.getElementById('p');
         
        a.addEventListener('click',function (){
            alert('a');
        },true);
        b.addEventListener('click',function(){
            alert('b')
        },true)
        p.addEventListener('click',function(){
            alert('p')
        },true)
        //addEventListener 有三个参数
                //第一个是 事件名
                //第二个是 函数方法
                //第三个是 布尔值   (判断是事件冒泡还是事件捕捉  true 是事件捕捉  false 是事件捕捉)

    </script>
</html>

这是事件捕捉,一共会弹出三次
第一个会弹出 c
第二个会弹出 b
第三个会弹出 a

第三个值换成false,就会变成事件冒泡 (如上)

如果true和false共存的话,就会先执行true后执行false

阻止事件捕获

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #a{
                width: 100px;
                height: 100px;
                background: red;
            }
            #b{
                width: 50px;    
                height: 50px;
                background: green;
            }
        </style>
    </head>
    <body>
        <div id='a'>
            <div id='b'>
                <p id="p">111</p>
            </div>
            
        </div>
    </body>
    <script type="text/javascript">
        var a=document.getElementById('a');
        var b=document.getElementById('b');
        var p=document.getElementById('p');
         
        a.addEventListener('click',function (){
            alert('a');
        },true);
        b.addEventListener('click',function(){
            alert('b')
///阻止事件捕获
        event.stopPropagation()
        },true)
        p.addEventListener('click',function(){
            alert('p')
        },true)
        //addEventListener 有三个参数
                //第一个是 事件名
                //第二个是 函数方法
                //第三个是 布尔值   (判断是事件冒泡还是事件捕捉  true 是事件捕捉  false 是事件捕捉)

    </script>
</html>

这样就可以阻止事件捕获
会弹出两次
第一个会弹出 c
第二个会弹出 b
阻止了 a 的弹出

有帮助的话 ,别忘了下面的心心点你一下(想知道更多关于知识请私信我哦)

如有不懂或解决不了的问题可以私信我,或者在下方评论 ,小陈帮你解决困难

相关文章

  • 事件冒泡(阻止冒泡)和事件捕捉(阻止捕获)

    很多朋友私聊问我怎么阻止事件冒泡,不懂事件冒泡和事件捕捉的童鞋看过来了,小编今天就来给大家讲解一下。 我们先来简单...

  • 事件冒泡(阻止冒泡)和事件捕捉(阻止捕获)

    原理 : DOM事件流(event flow ): 存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。 事件...

  • java script 知识点

    事件事件流冒泡捕获阻止冒泡e.stopPropagation()阻止默认事件e.preventDefault()常...

  • 事件代理及常用的 HTML 事件

    之前总结了事件捕获和冒泡以及阻止事件传播,今天写一下事件代理方面的总结DOM 事件之捕获、冒泡:阻止事件传播: 事...

  • vue 阻止事件冒泡,捕获方法

    要想了解 VUE 阻止事件冒泡和捕获方法,首先要了解一下 JS 事件和 JS 阻止事件冒泡,捕获方法 1. js ...

  • vue事件

    事件:stopPropagation, cancelBubble=true阻止事件传播,阻止冒泡,也可以阻止捕获p...

  • js中的事件

    事件 事件流冒泡捕获阻止冒泡 阻止默认事件 常用事件 键盘 窗口 鼠标 拖放松开 表单 事件参数target 目标...

  • vue修饰符

    事件修饰符: .stop 阻止事件冒泡 .prevent 阻止默认事件 .capture 事件捕获 .self 将...

  • 微信小程序中bind和catch的区别

    bindtap 冒泡事件,事件绑定不会阻止冒泡事件向上冒泡catchtap 非冒泡事件, 事件绑定阻止冒泡事件...

  • day29-web前端之jQuery及Ajax

    1事件冒泡和捕获 1.1.事件冒泡:在子标签中产生的事件会传递给父标签 1.2事件捕获 捕获事件-阻止事件从子标签...

网友评论

      本文标题:事件冒泡(阻止冒泡)和事件捕捉(阻止捕获)

      本文链接:https://www.haomeiwen.com/subject/jhcooqtx.html