JS中事件冒泡和事件捕获介绍


Posted in Javascript onDecember 13, 2016

谈起JavaScript的 事件,事件冒泡、事件捕获、阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免。
事件捕获阶段:事件从最上一级标签开始往下查找,直到捕获到事件目标(target)。
事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签。

1、冒泡事件:

事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。通俗来讲就是,就是当设定了多个div的嵌套时;即建立了父子关系,当父div与子div共同加入了onclick事件时,当触发了子div的onclick事件后,子div进行相应的js操作,但是父div的onclick事件同样会被触发。

html:

<div>
 <input type="button" value="测试事件冒泡" />
</div>

js:

var $input = document.getElementsByTagName("input")[0];
   var $div = document.getElementsByTagName("div")[0];
   var $body = document.getElementsByTagName("body")[0];
 
   $input.onclick = function(e){
      this.style.border = "5px solid red"
      var e = e || window.e;
      alert("red")
   }
   $div.onclick = function(e){
      this.style.border = "5px solid green"
      alert("green")
   }
   $body.onclick = function(e){
      this.style.border = "5px solid yellow"
      alert("yellow")
   }

效果:依次弹出”red“,"green","yellow"。这就是事件冒泡:触发button这个元素,却连同父元素绑定的事件一同触发。

2、阻止事件冒泡

如果对input的事件绑定改为:

$input.onclick = function(e){
  this.style.border = "5px solid red"
  var e = e || window.e;
  alert("red")
  e.stopPropagation();
}

这个时候只会弹出”red“,因为阻止了事件冒泡。

3、事件捕获:

从顶层元素到目标元素或者从目标元素到顶层元素,和事件冒泡是一个相反的过程。事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。

$input.addEventListener("click", function(){
  this.style.border = "5px solid red";
  alert("red")
}, true)
$div.addEventListener("click", function(){
  this.style.border = "5px solid green";
  alert("green")
}, true)
$body.addEventListener("click", function(){
  this.style.border = "5px solid yellow";
  alert("yellow")
}, true)

这个时候依次弹出”yellow“,"green","red"。这就是事件的捕获。 

如果把addEventListener方法的第三个参数改成false,则表示只在冒泡的阶段触发,弹出的依次为:”red“,"green","yellow"。这是因为在W3C模型中,任何事件发生时,先从顶层开始进行事件捕获,直到事件触发到达了事件源元素。然后,再从事件源往上进行事件冒泡,直到到达document。

程序员可以自己选择绑定事件时采用事件捕获还是事件冒泡,方法就是绑定事件时通过addEventListener函数,它有三个参数,第三个参数若是true,则表示采用事件捕获,若是false,则表示采用事件冒泡。

ele.addEventListener('click',doSomething2,true)
true=捕获
false=冒泡

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
扩展String功能方法
Sep 22 Javascript
javascript之锁定表格栏位
Jun 29 Javascript
IE iframe的onload方法分析小结
Jan 07 Javascript
js实现杯子倒水问题自动求解程序
Mar 25 Javascript
超简单JS二级、多级联动的简单实例
Feb 18 Javascript
jQuery获取节点和子节点文本的方法
Jul 22 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
Oct 19 Javascript
javascript创建含数字字母的随机字符串方法总结
Aug 01 Javascript
js 转义字符及URI编码详解
Feb 28 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
Oct 31 Javascript
JavaScript文档加载模式以及元素获取
Jul 28 Javascript
Vue.js中v-bind指令的用法介绍
Mar 13 Vue.js
AngularJS入门教程之路由机制ngRoute实例分析
Dec 13 #Javascript
解决Window10系统下Node安装报错的问题分析
Dec 13 #Javascript
浅析Jquery操作select
Dec 13 #Javascript
Vue.js使用v-show和v-if的注意事项
Dec 13 #Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
Dec 13 #Javascript
Es6 写的文件import 起来解决方案详解
Dec 13 #Javascript
JS实现图片垂直居中显示小结
Dec 13 #Javascript
You might like
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
详解JavaScript中this关键字的用法
2016/05/26 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
2017/04/25 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
python读取csv文件示例(python操作csv)
2014/03/11 Python
Python 字典dict使用介绍
2014/11/30 Python
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
详解Django中的过滤器
2015/07/16 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
python实现用户名密码校验
2020/03/18 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
会展中心部门工作职责
2013/11/27 职场文书
二手书店创业计划书
2014/01/16 职场文书
社区八一活动方案
2014/02/03 职场文书
竞聘自述材料
2014/08/25 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
校运动会广播稿300字
2014/10/07 职场文书