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 相关文章推荐
实现web打印的各种方法介绍及实现代码
Jan 09 Javascript
两个listbox实现选项的添加删除和搜索
Mar 01 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
Oct 17 Javascript
10个很棒的jQuery代码片段
Sep 24 Javascript
jQuery+CSS实现简单切换菜单示例
Jul 27 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
Aug 08 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
Mar 21 Javascript
ES6扩展运算符的用途实例详解
Aug 20 Javascript
微信小程序使用字体图标的方法
May 23 Javascript
详解vue父子组件关于模态框状态的绑定方案
Jun 05 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
Mar 02 Javascript
ant design vue中表格指定格式渲染方式
Oct 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生成自己的LOG文件
2006/10/09 PHP
php URL验证正则表达式
2011/07/19 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
php 中的closure用法详解
2017/06/12 PHP
php实现的生成排列算法示例
2019/07/25 PHP
js 表格隔行颜色
2009/12/02 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
2017/04/20 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
详解Python map函数及Python map()函数的用法
2017/11/16 Python
python3.x实现发送邮件功能
2018/05/22 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
django rest framework serializers序列化实例
2020/05/13 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
研修心得体会
2014/09/04 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
后备干部推荐材料
2014/12/24 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
详解Vue的sync修饰符
2021/05/15 Vue.js
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫