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

     

  • 相关阅读:
    Python 获取校内(人人网)的所有好友照片存储到本地
    Learning DNN Module Developers guide
    第一次用blog
    杂谈:淘宝商城“暴动”事件
    百度三维地图体验(坑爹啊有图有真相)
    从历史的角度杂谈《中国没有乔布斯,美国没有史玉柱》说起
    南漂一年个人随想录
    我离淘宝有多远?
    centos搭建Git分布式管理控制系统
    乔布斯与中国
  • 原文地址:https://www.cnblogs.com/wanguofeng/p/10573106.html
Copyright © 2020-2023  润新知