博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
事件冒泡、事件捕获、事件委托
阅读量:4692 次
发布时间:2019-06-09

本文共 1627 字,大约阅读时间需要 5 分钟。

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>减少循环添加事件,性能更好

  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';
      }

    }

  }

 

转载于:https://www.cnblogs.com/wangpengfei8313/p/10136189.html

你可能感兴趣的文章
P2709 小B的询问
查看>>
PHP echo 和 print 语句
查看>>
第一讲 一个简单的Qt程序分析
查看>>
Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
查看>>
poj 1979 Red and Black(dfs)
查看>>
【.Net基础03】HttpWebRequest模拟浏览器登陆
查看>>
zTree async 动态参数处理
查看>>
Oracle学习之常见错误整理
查看>>
lock_sga引起的ksvcreate :process(m000) creation failed
查看>>
数据库插入数据乱码问题
查看>>
altium annotate 选项设置 complete existing packages
查看>>
【模式识别与机器学习】——SVM举例
查看>>
【转】IT名企面试:微软笔试题(1)
查看>>
IO流入门-第十章-DataInputStream_DataOutputStream
查看>>
DRF的分页
查看>>
Mysql 模糊匹配(字符串str中是否包含子字符串substr)
查看>>
python:open/文件操作
查看>>
流程控制 Day06
查看>>
Linux下安装Tomcat
查看>>
windows live writer 2012 0x80070643
查看>>