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 相关文章推荐
不错的一个日期输入 动态
Nov 06 Javascript
javascript中的数字与字符串相加实例分析
Aug 14 Javascript
JS清除IE浏览器缓存的方法
Jul 26 Javascript
JSON取值前判断
Dec 23 Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
Dec 31 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
Dec 20 Javascript
js实现时间轴自动排列效果
Mar 09 Javascript
jQuery+Ajax实现用户名重名实时检测
Jun 01 jQuery
微信小程序与公众号实现数据互通的方法
Jul 25 Javascript
JavaScript实现轮播图效果代码实例
Sep 28 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
Nov 04 jQuery
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更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
jQuery html()等方法介绍
2009/11/18 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
密码强度检测效果实现原理与代码
2013/01/04 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
2016/08/06 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
2019/06/28 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
numpy中索引和切片详解
2017/12/15 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
python距离测量的方法
2018/03/06 Python
目前最全的python的就业方向
2018/06/05 Python
如何使用python操作vmware
2019/07/27 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
python3处理word文档实例分析
2020/12/01 Python
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
课外访万家心得体会
2014/09/03 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
机关班子查摆问题及整改措施
2014/10/28 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
MySQL基础(二)
2021/04/05 MySQL
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL