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 相关文章推荐
jquery事件机制扩展插件 jquery鼠标右键事件
Dec 21 Javascript
javascript 图片裁剪技巧解读
Nov 15 Javascript
css transform 3D幻灯片特效实现步骤解读
Mar 27 Javascript
onbeforeunload与onunload事件异同点总结
Jun 24 Javascript
JQuery+DIV自定义滚动条样式的具体实现
Jun 25 Javascript
js实现的早期滑动门菜单效果代码
Aug 27 Javascript
jQuery的文档处理程序详解
May 10 Javascript
javascript中Date对象应用之简易日历实现
Jul 12 Javascript
JS简单实现滑动加载数据的方法示例
Oct 18 Javascript
轻松学习JavaScript函数中的 Rest 参数
May 30 Javascript
手把手15分钟搭一个企业级脚手架
Sep 16 Javascript
js实现星星海特效的示例
Sep 28 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/10/29 PHP
php控制文件下载速度的方法
2015/03/24 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
多版本Python共存的配置方法
2017/05/22 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Django工程的分层结构详解
2019/07/18 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
PyTorch中的C++扩展实现
2020/04/02 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
python实现计算图形面积
2021/02/22 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
用canvas显示验证码的实现
2020/04/10 HTML / CSS
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
必须要使用游标的SQL语句有那些
2012/05/07 面试题
上班睡觉检讨书
2014/01/09 职场文书
开门红主持词
2014/04/02 职场文书
详解Spring事件发布与监听机制
2021/06/30 Java/Android
Pygame Draw绘图函数的具体使用
2021/11/17 Python