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延迟加载(setTimeout) JS最后加载
Jul 15 Javascript
固定表格行列(expression)在IE下适用
Jul 25 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
May 04 Javascript
JavaScript中Math.SQRT2属性的使用详解
Jun 14 Javascript
jquery原理以及学习技巧介绍
Nov 11 Javascript
jquery  实现轮播图详解及实例代码
Oct 12 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
Jan 14 Javascript
详解Node中导入模块require和import的区别
Aug 11 Javascript
利用vue开发一个所谓的数独方法实例
Dec 21 Javascript
AngularJS select加载数据选中默认值的方法
Feb 28 Javascript
React+Webpack快速上手指南(小结)
Aug 15 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
Nov 29 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 UTF8 文件的签名问题
2009/10/30 PHP
destoon常用的安全设置概述
2014/06/21 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
分享别人写的一个小型js框架
2007/08/13 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
浅谈js基本数据类型和typeof
2016/08/09 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
vc6编写python扩展的方法分享
2014/01/17 Python
基于Python的身份证号码自动生成程序
2014/08/15 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
浅谈python常用程序算法
2019/03/22 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
Python csv模块使用方法代码实例
2019/08/29 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
培训班开班仪式主持词
2014/03/28 职场文书
运动会横幅标语
2014/06/17 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
财务会计求职信范文
2015/03/20 职场文书
结婚仪式主持词
2015/06/29 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电
python神经网络ResNet50模型
2022/05/06 Python