zoukankan      html  css  js  c++  java
  • JS中绑定事件顺序(事件冒泡与事件捕获区别)

    在JS中,绑定的事件默认的执行时间是在冒泡阶段执行,而非在捕获阶段(重要),这也是为什么当父类和子类都绑定了某个事件,会先调用子类绑定的事件,后调用父类的事件。直接看下面实例

    <!Doctype html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
        *{margin:0;padding: 0;}
        </style>
    </head>
    <body>
    <div  id="id1" style="height:400px;  border:1px solid #000;">
        <div id="id2" style="height:200px;  border:1px solid #000;">
            <div id="id3" style="height:50px;  border:1px solid #000;"></div>
        </div>
    </div>
    </body>
    <script type="text/javascript">
        var obj1=document.getElementById('id1'); 
        obj1.addEventListener('click',function(){
            alert('id1');
        },false);
    
        var obj2=document.getElementById('id2');
        obj2.addEventListener('click',function(){
            alert('id2');
        },true);
    
        var obj3=document.getElementById('id3');
        obj3.addEventListener('click',function(){
            alert('id3');
        },true);
        /*如果第三个参数为true,则事件在捕获阶段执行,如果第三个参数为false,则事件在冒泡阶段执行*/
    </script>
    </html>

    当点击id3元素时候,执行结果是:id2,id3,id1

    解析:因为obj2与obj3绑定的方法在捕获阶段执行,obj1的事件在冒泡阶段执行。

    总结

    在JS中,绑定的事件默认的执行时间是在冒泡阶段执行,而非在捕获阶段,必须要理解

    不过我们可以通过绑定事件时,指定事件执行时间是在冒泡阶段还是捕获阶段。

    obj.addEventListener(event,function(){},bool)

    bool:false,代表冒泡阶段执行

    bool:true,代表捕获阶段执行

    JS在默认情况下获取事件后,就开始从根元素开始捕获所有该事件的监听对象,然后在冒泡阶段逐一执行。捕获阶段是在冒泡阶段前面

    阻止冒泡

    w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true;

    阻止默认行为

    w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false;

    关于JS 事件冒泡和onclick,click,on()事件触发顺序

    onclick,click,on()的优先关系:onclick>click>on();

    onclick和click绑定的事件,彼此之间遵守事件冒泡规则,从内到外触发;

    on()绑定的事件,总是晚于onclick和click绑定的事件触发;

  • 相关阅读:
    hdu 1269 迷宫城堡 (并查集)
    hdu 1272 小希的迷宫 (深搜)
    hdu 1026 Ignatius and the Princess I (深搜)
    hdu 1099 Lottery
    hdu 1068 Girls and Boys (二分匹配)
    几个基础数位DP(hdu 2089,hdu 3555,uestc 1307 windy 数)
    hdu 1072 Nightmare (广搜)
    hdu 1398 Square Coins (母函数)
    hdu 1253 胜利大逃亡 (深搜)
    hdu 1115 Lifting the Stone (求重心)
  • 原文地址:https://www.cnblogs.com/cboydream/p/6296896.html
Copyright © 2011-2022 走看看