JS传播事件、取消事件默认行为、阻止事件传播详解


Posted in Javascript onAugust 14, 2017

1.事件处理程序的返回值 

      通常情况下,返回值false就是告诉浏览器不要执行这个事件相关的默认操作。例如,表单提交按钮的onclick事件处理程序能通过返回false阻止浏览器提交表单,再如a标签的onclick事件处理程序通过返回false阻止跳转href页面。类似地,如果用户输入不合适的字符,输入域上的onkeypress事件处理程序能通过返回false来过滤键盘输入。 
      事件处理程序的返回值只对通过属性注册的处理程序才有意义。

2.调用顺序

      文档元素或其他对象可以为指定事件类型注册多个事件处理程序。当适当的事件发生时,浏览器必须按照如下规则调用所有的事件处理程序:

通过设置对象属性或HTML属性注册的处理程序一直优先调用。
使用addEventListener()注册的处理程序按照它们的注册顺序调用。
使用attachEvent()注册的处理程序可能按照任何顺序调用,所以代码不应该依赖于调用顺序

3.事件传播

在调用在目标元素上注册的事件处理函数后,大部分事件会“冒泡”到DOM树根。调用目标的父元素的事件处理程序,然后调用在目标的祖父元素上注册的事件处理程序。这会一直到Document对象,最后到达Window对象。

发生在文档元素上的大部分事件都会冒泡,值得注意的例外是focus、blur和scroll事件。文档元素的load事件会冒泡,但它会在Document对象上停止冒泡而不会传播到Window对象。只有当整个文档都加载完毕时才会触发Window对象的load事件。

4.取消事件默认行为、阻止事件传播

      在支持addEventListener()的浏览器中,可以通过调用事件对象的preventDefault()方法取消事件的默认操作。IE9之前的IE中,可以通过设置事件对象的returnValue属性为false达到同样的效果。下面一段代码是结合三种技术取消事件:

function cancelHandler(event){
 var event=event||window.event;//兼容IE
 //取消事件相关的默认行为
 if(event.preventDefault) //标准技术
 event.preventDefault();
 if(event.returnValue) //兼容IE9之前的IE
 event.returnValue=false;
 return false; //用于处理使用对象属性注册的处理程序
}

取消事件相关的默认操作只是事件取消中的一种,我们也能取消事件传播。在支持addEventListener()的浏览器中,可以调用事件对象的stopPropagation()方法以阻止事件的继续传播。如果在同一对象上定义了其他处理程序,剩下的处理程序将依旧被调用,但调用stopPropagation()之后任何其他对象上的事件处理程序将不会被调用。

 IE9之前的IE不支持stopPropagation()方法,而是设置事件对象cancelBubble属性为true来实现阻止事件进一步传播。

好了以上就是小编为大家整理的全部内容啦,希望对大家有所帮助~

Javascript 相关文章推荐
JS检测图片大小的实例
Aug 21 Javascript
js构造函数、索引数组和属性的实现方式和使用
Nov 16 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
Nov 29 Javascript
数组Array的一些方法(总结)
Feb 17 Javascript
AngularJS实现根据不同条件显示不同控件
Apr 20 Javascript
js禁止表单重复提交
Aug 29 Javascript
vue实现tab切换外加样式切换方法
Mar 16 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
Dec 05 Javascript
详解react阻止无效重渲染的多种方式
Dec 11 Javascript
Vue如何获取数据列表展示
Dec 11 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
Aug 14 #Javascript
JavaScript实现动态添加Form表单元素的方法示例
Aug 14 #Javascript
JavaScript实现的搜索及高亮显示功能示例
Aug 14 #Javascript
带你了解session和cookie作用原理区别和用法
Aug 14 #Javascript
react.js使用webpack搭配环境的入门教程
Aug 14 #Javascript
JS原生数据双向绑定实现代码
Aug 14 #Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
Aug 14 #jQuery
You might like
php批量上传的实现代码
2013/06/09 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
javascript event 事件解析
2011/01/31 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python wxpython 实现界面跳转功能
2019/12/17 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
消防安全宣传标语
2014/06/07 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
医生个人年度总结
2015/02/28 职场文书
法律讲堂观后感
2015/06/11 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书