js 冒泡事件与解决冒泡事件 - Go语言中文社区

js 冒泡事件与解决冒泡事件


事件冒泡 :当一个元素接收到事件的时候 会把他接收到的事件传给自己的父级,一直到window 。

html代码:


<
div id="div1"> <div id="div2"> <div id="div3"> </div> </div> </div>
<style>
    #div1{
      width: 300px;
      height: 200px;
      background-color: red;
    }
    #div2{
      width: 250px;
      height: 150px;
      background-color: green;
    }
    #div3{
      width: 200px;
      height: 100px;
      background-color: blue;
    }
  </style>
my$("div1").onclick=function () {
    console.log(this.id);
  };//div3 div2 div1

  my$("div2").onclick=function () {
    console.log(this.id);
  };//div2 div1

  my$("div3").onclick=function () {
    console.log(this.id);
  };//div1

代码很简单,就是三个父子关系的div,然后分别加了点击事件,当我们在div3里面点击的时候,会发现弹出了一次3,接着又弹出了2,最后又弹出了1,这说明点击的时候,不仅div3的事件被触发了,它的父级div2 与div1的点击事件也触发了,这种现象就叫做冒泡。

 

取消事件冒泡有两种方式:

1、标准的W3C 方式:e.stopPropagation(); 这里的stopPropagation是标准的事件对象的一个方法,调用即可(谷歌和火狐支持,IE不支持

my$("div3").onclick=function (e) {
    console.log(this.id);
    e.stopPropagation();
  };

2、非标准的IE方式:window.event.cancelBubble=true; 这里的cancelBubble是 IE事件对象的属性,设为true就可以了(IE特有的,谷歌支持,火狐不支持

my$("div2").onclick=function () {
    console.log(this.id);
    window.event.cancelBubble=true;
  };

 

为了兼容解决事件冒泡的方式:

function stopBubble(e) {
      //如果提供了事件对象,则这是一个非IE浏览器
      if (e && e.stopPropagation)
        //因此它支持W3C的stopPropagation()方法
        e.stopPropagation();
      else
        //否则,我们需要使用IE的方式来取消事件冒泡
        window.event.cancelBubble = true;
    }
    my$("div2").onclick = function (e) {
      console.log(this.id);
      stopBubble(e)
    };

    my$("div3").onclick = function (e) {
      console.log(this.id);
      stopBubble(e)
    };

 

 

版权声明:本文来源博客园,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.cnblogs.com/wanguofeng/p/10573106.html
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-11-17 15:07:22
  • 阅读 ( 649 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢