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 相关文章推荐
使用node.js 制作网站前台后台
Nov 13 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
Jun 26 Javascript
jQuery实现hover合成事件的方法
Aug 06 Javascript
JavaScript识别网页关键字并进行描红的方法
Nov 09 Javascript
超详细的javascript数组方法汇总
Nov 21 Javascript
jQuery根据ID、CLASS、等获取对象的实例
Dec 04 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
Dec 09 Javascript
vue子组件使用自定义事件向父组件传递数据
May 27 Javascript
浅析vue深复制
Jan 29 Javascript
vue.js 微信支付前端代码分享
Feb 10 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
Sep 21 Javascript
ES6 解构赋值的原理及运用
May 25 Javascript
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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
2012/09/07 PHP
提高PHP编程效率的方法
2013/11/07 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
在Python中定义一个常量的方法
2018/11/10 Python
python多任务及返回值的处理方法
2019/01/22 Python
Python的高阶函数用法实例分析
2019/04/11 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
Python底层封装实现方法详解
2020/01/22 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
农贸市场管理制度
2014/01/31 职场文书
高中毕业自我评价
2014/02/08 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
婚宴主持词
2015/06/30 职场文书