JavaScript中使用stopPropagation函数停止事件传播例子


Posted in Javascript onAugust 27, 2014

JS中的事件默认是冒泡方式,逐层往上传播,可以通过stopPropagation()函数停止事件在DOM层次中的传播。如以下例子:

HTML代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>stopPropagation()使用 - 琼台博客</title>
</head>
<body>
<button>button</button>
</body>
</html>
[/code] 
没有加stopPropagation()
[code]
var button = document.getElementsByTagName('button')[0];
button.onclick=function(event){
  alert('button click');
};
 
document.body.onclick=function(event){
  alert('body click');
}

DOM逐层往上传播,所以单击button按钮也传播到了body层,于是body层的click也响应了。结果弹出两个警告框,分别是button与body。

加了stopPropagation()

var button = document.getElementsByTagName('button')[0];
button.onclick=function(event){
  alert('button click');
  // 停止DOM事件层次传播
  event.stopPropagation();
};
 
document.body.onclick=function(event){
  alert('body click');
}

在button的单击事件处理函数中使用了stopPropagation()停止事件传播函数,所以在弹出来自button单击事件的警告框以后就传播不到body,也就不会再次弹出body的警告框,结果只谈一次警告框。

好多童鞋在写JS的时候,往往忽视了DOM事件逐层往上传播的特性,导致程序出现异常。如果需要了解更深入的知识可以找找有关JS事件冒泡的资料看看。

Javascript 相关文章推荐
一个用js实现控制台控件的代码
Sep 04 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
Aug 24 Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 Javascript
微信小程序 本地数据存储实例详解
Apr 13 Javascript
Vuejs实现带样式的单文件组件新方法
May 02 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
Jan 12 Javascript
vue数据控制视图源码解析
Mar 28 Javascript
React手稿之 React-Saga的详解
Nov 12 Javascript
Vue项目中使用jquery的简单方法
May 16 jQuery
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
Mar 04 Javascript
Vue3中toRef与toRefs的区别
Mar 24 Vue.js
Vue操作Storage本地化存储
Apr 29 Vue.js
JavaScript闭包函数访问外部变量的方法
Aug 27 #Javascript
JavaScript中switch判断容易犯错的一个细节
Aug 27 #Javascript
JavaScript中使用arguments获得函数传参个数实例
Aug 27 #Javascript
JavaScript中输出标签的方法
Aug 27 #Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
Aug 27 #Javascript
JavaScript实现的使用键盘控制人物走动实例
Aug 27 #Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 #Javascript
You might like
php缓存技术介绍
2006/11/25 PHP
php下将XML转换为数组
2010/01/01 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
Vue如何实现组件的源码解析
2017/06/08 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
Python数据类型详解(二)列表
2016/05/08 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
详解python:time模块用法
2019/03/25 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
Python3开发环境搭建详细教程
2020/06/18 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
python 制作本地应用搜索工具
2021/02/27 Python
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
求职简历自荐信
2013/10/20 职场文书
文秘专业大学生求职信
2013/11/10 职场文书
产品设计开发计划书
2014/05/07 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis