JavaScript捕获和冒泡探讨
<div id="div">
<input type="button" value="banana" id="banana" />
</div>
在此页面中我们添加如下的代码:
var btn = document.getElementById('banana');
var div = document.getElementById('div');
btn.addEventListener('click', function () {
console.log('capture', 'btn');
}, true);
btn.addEventListener('click', function () {
console.log('bubble', 'btn');
}, false);
div.addEventListener('click', function () {
console.log('capture', 'div');
}, true);
div.addEventListener('click', function () {
console.log('bubble', 'div');
}, false);
给button和div我们都是先绑定的捕获事件,此时运行的结果如下:
capture div
capture btn
bubble btn
bubble div
可以看出是先运行的 捕获div - > 捕获 btn - > 冒泡 btn -> 冒泡 div.
我们改改事件绑定的先后顺序,代码如下:
var btn = document.getElementById('banana');
var div = document.getElementById('div');
btn.addEventListener('click', function () {
console.log('bubble', 'btn');
}, false);
btn.addEventListener('click', function () {
console.log('capture', 'btn');
}, true);
div.addEventListener('click', function () {
console.log('bubble', 'div');
}, false);
div.addEventListener('click', function () {
console.log('capture', 'div');
}, true);
再看运行的结果:
capture div
bubble btn
capture btn
bubble div
此时结果是 捕获 div -> 冒泡 btn -> 捕获 btn -> 冒泡 div .
猜测结论: 在最后一个捕获元素中,冒泡和捕获的事件执行的先后顺序与事件绑定的先后顺序有关,谁先绑定就优先执行谁。
我们再改改页面代码:
<div id="div">
<div id="div1">
<input type="button" value="banana" id="banana" />
</div>
</div>
改改绑定事件的代码:
var btn = document.getElementById('banana');
var div = document.getElementById('div');
var div1 = document.getElementById('div1');
btn.addEventListener('click', function () {
console.log('bubble', 'btn');
}, false);
btn.addEventListener('click', function () {
console.log('capture', 'btn');
}, true);
div.addEventListener('click', function () {
console.log('bubble', 'div');
}, false);
div.addEventListener('click', function () {
console.log('capture', 'div');
}, true);
div1.addEventListener('click', function () {
console.log('bubble', 'div1');
}, false);
div1.addEventListener('click', function () {
console.log('capture', 'div1');
}, true);
点击button执行的结果:
capture div
capture div1
bubble btn
capture btn
bubble div1
bubble div
此时结果是 : 捕获 div - > 捕获div1 - > 冒泡 btn -> 捕获 btn -> 冒泡 ->div1 -> 冒泡 div.
其它的元素都是按照先捕获后冒泡的顺序在执行,只有最后一个捕获元素中,冒泡和捕获的事件执行的先后顺序与事件绑定的先后顺序有关,谁先绑定就优先执行谁。
JavaScript捕获和冒泡探讨的更多相关文章
- JavaScript捕获与冒泡与委托
事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件. 相反的,事件冒泡是自下而上的去触发事件. 并不是所有的事件都能冒泡,以下事件不冒泡:blur.focus.load.un ...
- JavaScript中捕获/阻止捕获、冒泡/阻止冒泡
JavaScript中捕获/阻止捕获.冒泡/阻止冒泡 事件流描述的是从页面中接收事件的顺序.提出事件流概念的正是IE和Netscape,但是前者提出的是我们常用的事件冒泡流,而后者提出的是事件捕获流. ...
- JavaScript的事件监听、捕获和冒泡
在前端开发中,我们经常需要对某些事件进行监听.这样只要在指定的元素上触发了该事件,就会执行一个回调函数来进行相关的操作. 而JavaScript中事件监听的方法总共有三种,分别如下: element. ...
- javascript事件捕获与冒泡
对“捕获”和“冒泡”这两个概念,我想我们对冒泡更熟悉一些,因为在我们使用的所有浏览器中,都支持事件冒泡,即事件由子元素向祖先元素传播的,就 像气泡从水底向水面上浮一样.而在像firefox,chrom ...
- JavaScript(3)---事件冒泡、事件捕获
JavaScript(3)---事件冒泡与事件捕获 一.理解冒泡与捕获 假设有这么一段代码 <body> <div><p>标签</p> </div ...
- javascript的事件监听与捕获和冒泡
在前端开发中,我们经常需要对某些事件进行监听.这样只要在指定的元素上触发了该事件,就会执行一个回调来进行相关的操作. 而js中事件监听方法总共有三种,分别如下所示: element.addEventL ...
- javaScript的事件冒泡事件捕获
(1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: div -> body -> document IE 6.0: div ...
- 浅析JavaScript事件流——冒泡
一.什么是事件冒泡流 我们知道事件流指的是从页面中接受事件的顺序. 为了形象理解事件冒泡,可以想象三军主将诸葛亮,在帐内运筹帷幄,眼观六路耳听八方,这时候前方的战事情况就需要靠传令兵来传达,当第一位传 ...
- dom事件不求甚解,色解事件捕获和冒泡
以前对事件只会用jq的bind绑定一下,脑海里留着书中的事件循环,一直认为事件就是这儿循环的,最近看园子里的文章,对事件的了解更模糊了 所以我做了个小实验,总结一下看的这些零零碎碎的文章,如果总结错了 ...
随机推荐
- TensorFlow.资料
1.ZC:看来 要用 TensorFlow,基本逃不过 Python了... TensorFlow物体识别——通过机器学习搭建属于自己的物体识别库 - 迷途无归的博客 - CSDN博客.html(h ...
- Zookeeper概述、特点、数据模型
Zookeeper 1.Zookeeper概述 Zookeeper是一个工具,可以实现集群中的分布式协调服务. 所谓的分布式协调服务,就是在集群的节点中进行可靠的消息传递,来协调集群的工作. Zo ...
- PTA(Advanced Level)1033.To Fill or Not to Fill
With highways available, driving a car from Hangzhou to any other city is easy. But since the tank c ...
- 数据库学习其一 oracle11g数据泵导入导出
一.检查环境一致性 需检查数据库客户端与服务端字符编码,以避免后续各种各样的问题 查询服务端编码 注意最好用sqlplus查询,用plsql有时候会出现查询不一致问题,如下图同一个语句在plsql和s ...
- 缓存穿透 & 缓存雪崩 & 缓存击穿
一 缓存穿透 1. 行为 查询一个一定不存在的数据.存储层(姑且认为是db,下面都用db指代)查不到数据则不写入缓存,那么下次请求这个不存在的数据同样会到db层查询,失去了缓存的意义.流量大或人为恶意 ...
- C++ STL String学习 (待续)
头文件:<string> 字符串类初始化: string s1="aabbba"; s2=string("bbb"); string s3=stri ...
- 一文让你明白Redis持久化
网上虽然已经有很多类似的介绍了,但我还是自己总结归纳了一下,自认为内容和细节都是比较齐全的. 文章篇幅有 4k 多字,货有点干,断断续续写了好几天,希望对大家有帮助.不出意外地话,今后会陆续更新 Re ...
- 【规律】Growing Rectangular Spiral
Growing Rectangular Spiral 题目描述 A growing rectangular spiral is a connected sequence of straightline ...
- android中sqlite数据库的基本使用和添加多张表
看了很多关于android使用sqlite数据库的文章,很多都是介绍了数据库的建立和表的建立,而表通常都是只建立一张,而实际情况我们用到的表可能不止一张,那这种情况下我们又该怎么办呢,好了,下面我教大 ...
- Spring、SpringMVC版本及配置
一.Spring版本 Spring的最新版本是Spring 5.x,Spring 4.x的最后版本是Spring 4.3.x,会维护到2020年(Spring的GitHub主页对此有说明). 二.Sp ...