js中的stopImmediatePropagation方法和stopPropagation方法的区别
看到
e.stopImmediatePropagation()
这个方法时,记忆有点模糊了。特地回顾一下。
基本概念
stopImmediatePropagation
方法:该方法作用在当前节点及事件链的所有后续节点上,目的是在执行完当前事件处理程序后,停止当前节点及所有后续节点的同类事件处理程序的运行。stopPropagation
方法:该方法作用在后续节点上,目的在执行完绑定到当前元素上的所有同类事件处理程序后,停止执行所有后续节点的同类事件处理程序。
区别
- 两个方法只差一个
Immediate
stopPropagation
方法,调用后,会立即停止对后续节点的访问,但是会执行完绑定到当前节点上的所有同类事件处理程序;简言之,只能阻止父类元素的冒泡,就是一个元素绑定了多个同类事件(比如click),且父元素也绑定了该类事件,那么在元素调用stopPropagation
方法后,父元素不会执行同类事件,但是该元素绑定的多个同类事件会依次执行。stopImmediatePropagation
方法,调用后,除了所有后续节点,绑定到当前元素上的、当前事件处理程序之后的事件处理程序都不会执行。简言之,既能阻止父类元素冒泡,也能阻止同类事件的执行。假如一个元素绑定了多个同类事件(比如click),且父元素也绑定了该类事件,那么在元素调用stopImmediatePropagation
方法后,父元素不会执行同类事件,该元素执行完当前事件,绑定的同类事件也不会执行。
举例
<div id="div">
<input type="text" id="input"/>
</div>
var dom = document.querySelector('#input');
dom.addEventListener('blur', function (e) {
console.log('blur 1');
});
dom.addEventListener('blur', function (e) {
console.log('blur 2');
});
dom.addEventListener('keyup', function (e) {
console.log('keyup 1');
})
dom.addEventListener('keyup', function (e) {
console.log('keyup 2');
})
dom.addEventListener('click', function (e) {
//e.stopPropagation();
e.stopImmediatePropagation();
console.log('dom click 1');
})
dom.addEventListener('click', function (e) {
console.log('dom click 2');
})
var div = document.querySelector('#div');
div.addEventListener('click', function (e) {
console.log('div click 1');
})
div.addEventListener('click', function (e) {
console.log('div click 2');
})
结果说明:
- 不调用,点击输入框,
dom click 1
,dom click2
,div click 1
,div click2
会依次执行,blur
,keyup
事件触发后也是依次执行。 - 调用
stopPropagation
方法后,点击输入框,dom click 1
,dom click2
会依次执行,但阻止冒泡,父类元素的事同类事件不会执行。blur
,keyup
事件触发后会依次执行。 - 调用
stopImmediatePropagation
方法后,点击输入框,只会执行dom click1
,会阻止冒泡,且当前元素绑定的同类事件也会阻止。blur
,keyup
事件触发后会依次执行。
js中的stopImmediatePropagation方法和stopPropagation方法的区别的更多相关文章
- js中的splice方法和slice方法简单总结
slice:是截取用的 splice:是做删除 插入 替换用的 slice(start,end): 参数: start:开始位置的索引 end:结束位置的索引(但不包含该索引位置的元素) 例如: va ...
- JS中的call()方法和apply()方法用法总结
原文引自:https://blog.csdn.net/ganyingxie123456/article/details/70855586 最近又遇到了JacvaScript中的call()方法和app ...
- JS中的call()方法和apply()方法用法总结(挺好 转载下)
最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...
- StringUtils工具类中的isBlank()方法和isEmpty()方法的区别
1.isBlank()方法 1 public static boolean isBlank(String str) { 2 int strLen; 3 if (str == null || (strL ...
- Java Thread中,run方法和start方法的区别
两种方法的区别: 1.start方法 用 start方法来启动线程,是真正实现了多线程, 通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦 ...
- js中得call()方法和apply()方法的用法
方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方 ...
- [转] JS中的call()方法和apply()方法用法总结
//例1 <script> window.color = 'red'; document.color = 'yellow'; var s1 = {color: 'blue' }; func ...
- MediaPlayer: MediaPlayer中的prepare方法和prepareAsync方法的区别
prepare方法是将资源同步缓存到内存中,一般加载本地较小的资源可以用这个,如果是较大的资源或者网络资源建议使用prepareAsync方法,异步加载.但如果想让资源启动,即start()起来,因为 ...
- Thread中,run方法和start方法的区别
1. 通过调用Thread类中的start()方法可以启动一个线程,但是线程并不是立刻运行,而是处于就绪态,一旦获取cpu时间片,则会立即运行run()方法 2. start()方法实现了多线程运行, ...
随机推荐
- 2018.06.27The Windy's(费用流)
The Windy's Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 6003 Accepted: 2484 Descripti ...
- pat -1004(树的遍历)
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184 思路: (1)用vector记录每 ...
- 端口报错listen eaddrinuse:::xxx
端口报错 listen eaddrinuse:::xxx 表示这个端口被占用 结束正在使用此端的程序即可.
- Educational Codeforces Round 61 C 枚举 + 差分前缀和
https://codeforces.com/contest/1132/problem/C 枚举 + 差分前缀和 题意 有一段[1,n]的线段,有q个区间,选择其中q-2个区间,使得覆盖线段上的点最多 ...
- Livelock
Unlike deadlock, livelocked packets continue to move through the network, but never reach their dest ...
- s5-10 路由
路由器转发分组的依据 路由表 路由表从何而来 直连路由.静态路由.动态路由 路由器收到一个分组之后- 打开分组L3,提取出目的IP地址 确定目标网络,查找路由表 按位"AND&quo ...
- mysql学习之路_事物_存储过程_备份
数据备份与还原 备份:将当前已有的数据保留. 还原:将已经保留的数据恢复到对应表中 为什么要做数据备份 1,防止数据丢失,被盗,误操作 2,保护数据记录 数据备份还原方式有多种:数据表备份 单表数据备 ...
- nginx负载均衡总结
在关于高并发负载均衡一文中已经提到,企业在解决高并发问题时,一般有两个方向的处理策略,软件.硬件,硬件上添加负载均衡器分发大量请求,软件上可在高并发瓶颈处:数据库+web服务器两处添加解决方案,其中w ...
- Kafka常用命令收录
目录 目录 1 1. 前言 2 2. Broker默认端口号 2 3. 安装Kafka 2 4. 启动Kafka 2 5. 创建Topic 2 6. 列出所有Topic 3 7. 删除Topic 3 ...
- crontab条目包含%号问题
crontab条目中包含%号,最常见的取时间,如:date +%d, 对%需要使用\进行转义,否则不能按预期执行,正确做法为: * * * * * echo "`date +\%d`&quo ...