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

    当用户单击某个按钮的时候,浏览器认为单击事件不仅仅发生在按钮上。换句话说,在单击按钮的同时,也单击了按钮的容器元素,甚至单击了整个页面。

    DOM2.0模型将事件处理流程分为三个阶段:一、事件捕获阶段,二、事件目标阶段,三、事件冒泡阶段。

    1. 事件捕获:当某个元素触发某个事件(如onclick),顶层对象document就会发出一个事件流,随着DOM树的节点向目标元素节点流去,直到到达事件真正发生的目标元素。在这个过程中,事件相应的监听函数是不会被触发的。
    2. 事件目标:当到达目标元素之后,执行目标元素该事件相应的处理函数。如果没有绑定监听函数,那就不执行。
    3. 事件冒泡:从目标元素开始,往顶层元素传播。途中如果有节点绑定了相应的事件处理函数,这些函数都会被触发。

    事件冒泡:

    即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档)。简单的说就是事件从事件目标(target)开始,往上冒泡直到页面的document对象。

       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){
                var en=ev || event;
                en.cancelBubble=true;
                alert("div3");
            }
            odiv1.onclick=fdiv1;
            odiv2.onclick=fdiv2;
            odiv3.onclick=fdiv3;
        }

    js中阻止事件冒泡

      function fdiv3(e){
                var e1=e || event;
                e1.cancelBubble=true;
                alert("div3");
            }
    //点击div3的时候只用启动div3的事件.

     

    事件捕获

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

     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);

    true的用处是指定事件在事件捕获阶段执行。

    element.addEventListener(event, function, useCapture)

    event:必须。字符串,指定事件名。

    function:必须。指定要事件触发时执行的函数。

    useCapture:可选。布尔值,指定事件是否在捕获或冒泡阶段执行。

  • 相关阅读:
    【Luogu1501】Tree(Link-Cut Tree)
    【BZOJ3530】数数(AC自动机,动态规划)
    【BZOJ1212】L语言(AC自动机)
    【BZOJ2037】Sue的小球(动态规划)
    【BZOJ1899】午餐(动态规划)
    【BZOJ1009】GT考试(KMP算法,矩阵快速幂,动态规划)
    【BZOJ1040】骑士(动态规划)
    【BZOJ1969】航线规划(Link-Cut Tree)
    【BZOJ4653】【NOI2016】区间(线段树)
    我也不知道什么是"莫比乌斯反演"和"杜教筛"
  • 原文地址:https://www.cnblogs.com/JZN-dhy/p/13226030.html
Copyright © 2011-2022 走看看