zoukankan      html  css  js  c++  java
  • 事件冒泡、事件捕获、事件委托

    1、定义

    事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件。
    相反的,事件冒泡是自下而上的去触发事件。绑定事件方法的第三个参数,就是控制事件触发顺序是否为事件捕获。
    true,事件捕获;false,事件冒泡。默认false,即事件冒泡。e.stopPropagation会阻止冒泡

    2、示例

    <div id="div1">
      <div id="div2">元素</div>
    </div>
    <script>

      //事件冒泡

      var div1 = document.getElementById("div1");
      var div2 = document.getElementById("div2");

      div2.addEventListener("click", function(e){console.log("孩子事件")}, true);
      div1.addEventListener("click", function(e){console.log("父亲事件")}, true);

    </script>

    <script>

      //事件捕获
      var div1 = document.getElementById("div1");
      var div2 = document.getElementById("div2");

      div2.addEventListener("click", function(e){console.log("孩子事件")}, true);
      div1.addEventListener("click", function(e){console.log("父亲事件")}, true);
    </script>

    3、取消冒泡(两种方式)

    标准的W3C 方式:e.stopPropagation();这里的stopPropagation是标准的事件对象的一个方法,调用即可

    非标准的IE方式:ev.cancelBubble=true; 这里的cancelBubble是 IE事件对象的属性,设为true就可以了

    function stopBubble(e) {
        //如果提供了事件对象,则这是一个非IE浏览器
       if ( e && e.stopPropagation )
          //因此它支持W3C的stopPropagation()方法
          e.stopPropagation();
      else{
      //否则,我们需要使用IE的方式来取消事件冒泡
        window.event.cancelBubble = true;
      } }
    4、事件冒泡应用(事件委托或称事件代理)
    优点:<1>新添加的元素还会有之前的事件<2>减少循环添加事件,性能更好
    <script>

      window.onload = function(){
        var oUl = document.getElementById('ull');
        var aLi = document.getElementsByTagName('li');

        oUl.onmouseover = function(ev){
          var event = ev||window.event; // 获取event对象
          var target = ev.target || ev.srcElement; // 获取触发事件的目标对象

          if(target.nodeName.toLowerCase() == 'li'){ //判断目标对象是不是li
            target.style.background = 'red';
          }

        }

      }

    </script>
  • 相关阅读:
    <JZOJ5912>VanUSee
    <JZOJ5910>duliu
    <JZOJ5913>林下风气
    pytest学习笔记(二)
    试用saucelabs进行浏览器兼容性测试
    pytest学习笔记(一)
    SSM框架搭建,以及mybatis学习
    游戏2048的python实现
    使用svn在github上下载文件夹
    jenkins集成python的单元测试
  • 原文地址:https://www.cnblogs.com/wangpengfei8313/p/10136189.html
Copyright © 2011-2022 走看看