事件捕获和冒泡

事件捕获阶段:事件从最上一级标签开始往下查找,直到捕获到事件目标(target) ------事件传递的顺序是-从父级到子级

事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签。 -----------事件传递的顺序是-从子级到父级

    functionaddEvent(element,type,fn){

    if(element.addEventListener) {

    //如果第三个值为ture,则会在冒泡阶段触发

    element.addEventListener(type,fn,false);

    //如果第三个值为ture,则会在捕获阶段触发

   element.addEventListener(type,fn,true);

      }

   else if(attachEvent){

  element.attachEvent("on"+type,fn);

    }

      else{

    element["on"+type]=fn;

  }

  }

  functionremoveEvent(element,type,fn){

  if(element.addEventListener) {

  element.removeEventListener(type,fn,false);

}

else if(attachEvent){

element.detachEvent("on"+type,fn);

}

   else{

        element["on"+type]=null;

  }

    }

//********************绑定/移除事件******************************

/*********************************

*********取消冒泡

********参数

***********ev:要取消冒泡的事件对象

************************************/

    functionstopBubble(e){

       if(e&&e.stopPropagation){

      e.stopPropagation();

      }

  else{

  e.cancleBubble();

  }

}

//这时候element.addEventListener(type,fn,false);触发的是冒泡事件 --效果是每点击一个box只有该box被打印

事件传递的顺序是-从父级到子级

如果没加varevObj=window.event||ev;evObj.cancelBubble=true;

点击xm 时,会打印点击了xm点击了item点击了box

但是加上了取消冒泡事件后取消了冒泡后就不会再冒泡,父级就不会打印,从谁上加上取消冒泡它的父级之后就不会打印了

        addEvent(box,"click",function(){
        console.log("点击了box");
        varevObj=window.event||ev;
        evObj.cancelBubble=true;
      });

    addEvent(item,"click",function(ev){
    console.log("点击了item");
    varevObj=window.event||ev;
    evObj.cancelBubble=true;
  });
     addEvent(xm,"click",function(ev){
    console.log("点击了xm");
    //取消冒泡   取消了冒泡后就不会再冒泡,父级就不会打印
  varevObj=window.event||ev;
  evObj.cancelBubble=true;
});

取消冒泡事件

varevObj=window.event||ev;

1、evObj.cancelBubble=true;

2、evObj.stopPropagation();

//这时候element.addEventListener(type,fn,true);——触发的是捕获事件

事件传递的顺序是-从子级到父级

如果没加varevObj=window.event||ev;evObj.cancelBubble=true;

点击xm 时,会打印点击了box点击了item点击了xm

但是加上了取消冒泡事件后会组织捕获,子级就不会打印,从谁上加上取消冒泡它的子级之后就不会打印了

  addEvent(box,"click",function(){
    console.log("点击了box");
    varevObj=window.event||ev;
    // evObj.cancelBubble=true;
    evObj.stopPropagation();
  });
addEvent(item,"click",function(ev){
console.log("点击了item");
// var evObj=window.event||ev;
// evObj.cancelBubble=true;
});
  addEvent(xm,"click",function(ev){
console.log("点击了xm");

  //取消冒泡--可以阻止捕获   取消了冒泡后就不会再冒泡,父级就不会打印

// var evObj=window.event||ev;

 // evObj.cancelBubble=true;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 众所周知(假装是这样的),在IE(支持冒泡)和NetScape(支持捕获)两者打完之后,W3C给了个折中的结果“先...
    Yuxin_Liu阅读 2,047评论 0 0
  • JavaScript 事件捕获和冒泡 规范 在最新的 DOM 规范中,事件的捕获与冒泡是通过 addEventLi...
    shianqi阅读 3,262评论 0 0
  • 一、事件捕获:事件传递的顺序 (父级到子级)二、事件冒泡:事件处理的顺序 (默认:子级到父级)三、取消冒泡 就...
    大大的小小小心愿阅读 1,234评论 0 0
  • 问题的产生 同一事件在不同元素之间出现重叠 如何处理事件发生的顺序 问题的解决 在w3c的事件模型中,会首先捕获直...
    panw3i阅读 1,058评论 0 0
  • 在“集成OpenIM APNS消息推送机制一”中我们已经完成了APNS证书的申请。 接下来首先要把OpenIM 的...
    阿文很淘气阅读 4,231评论 3 1

友情链接更多精彩内容