zoukankan      html  css  js  c++  java
  • JS中的事件冒泡和事件捕获

    事件捕获阶段:事件从最上一级标签开始往下查找,直到捕获到事件目标(target)。

    事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签。

    用图示表示如下:

    1、冒泡事件:

    事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。通俗来讲就是,就是当设定了多个div的嵌套时;即建立了父子关系,当父div与子div共同加入了onclick事件时,当触发了子div的onclick事件后,子div进行相应的js操作,但是父div的onclick事件同样会被触发。 

    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>测试事件冒泡</title>
        <style>
            div{padding:40px;}
            #div1{background: #00B83F;}
            #div2{background: #2a6496}
            #div3{background: #93C3CF}
        </style>
        <script>
        window.onload=function (){
            var odiv1=document.getElementById("div1");
            var odiv2=document.getElementById("div2");
            var odiv3=document.getElementById("div3");
    
            function fdiv1(){
                alert("div1");
            }
            function fdiv2(){
                alert("div2");
            }
            function fdiv3(ev){ 
                alert("div3");
            }
            odiv1.onclick=fdiv1;
            odiv2.onclick=fdiv2;
            odiv3.onclick=fdiv3;
        }
    
        </script>
    
    </head>
    <body>
      <div id="div1">
          <div id="div2">
              <div id="div3"></div>
          </div>
      </div>
    </body>
    </html> 

    测试结果:点击div3时,依次弹出div3,div2,div1

    2.阻止事件冒泡:

    给div3的绑定事件改为。ev.canceBubble=true;

      function fdiv3(ev){
                var en=ev || event;
                en.cancelBubble=true;
                alert("div3");
            }

     测试结果:点击div3时,只弹出div3

    3、事件捕获

    从顶层元素到目标元素或者从目标元素到顶层元素,和事件冒泡是一个相反的过程。事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。

    代码更改如下:

    <script>
        window.onload=function (){
            var odiv1=document.getElementById("div1");
            var odiv2=document.getElementById("div2");
            var odiv3=document.getElementById("div3");
     
            odiv1.addEventListener("click",function(){
                alert("div1");
            },true);
            odiv2.addEventListener("click",function(){
                alert("div2");
            },true);
            odiv3.addEventListener("click",function(){
                alert("div3");
            },true);
        }
    </script>

     测试结果:点击div3时,依次弹出div1,div2,div3

    结论:绑定事件时通过addEventListener函数,它有三个参数,第三个参数若是true,则表示采用事件捕获,若是false,则表示采用事件冒泡。

  • 相关阅读:
    HarmonyOS Java UI之AdaptiveBoxLayout布局示例
    【鸿蒙开发板试用报告】OneNet平台+开发板实时监控温湿度(一)
    安装了瑞友天翼4.0后出现了远程桌面无法连接的问题
    CISVC.EXE的资源占用
    Delphi如何在窗体标题栏添加按钮
    Delphi中捕捉窗体的最小化、最大化、还原消息
    打印机任务无法删除
    Delphi创建一个虚幻的层窗口(Win2000/XP)
    工资年结时提示“上年数据已经结转”
    Delphi中如何控制其他程序窗体上的窗口控件
  • 原文地址:https://www.cnblogs.com/hfxm/p/8416586.html
Copyright © 2011-2022 走看看