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 相关文章推荐
用正则获取指定路径文件的名称
Feb 27 Javascript
extjs grid取到数据而不显示的解决
Dec 29 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
Aug 01 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
Jan 25 Javascript
Function.prototype.call.apply结合用法分析示例
Jul 03 Javascript
深入理解javascript动态插入技术
Nov 12 Javascript
JavaScript基础函数整理汇总
Jan 30 Javascript
JavaScript笔记之数据属性和存储器属性
Mar 31 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
Sep 13 Javascript
小程序兼容安卓和IOS数据处理问题及坑
Sep 18 Javascript
vue实现新闻展示页的步骤详解
Apr 11 Javascript
koa中间件核心(koa-compose)源码解读分析
Jun 15 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
php的字符串用法小结
2010/06/08 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
php+mysql实现简单的增删改查功能
2015/07/13 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
如何使用Python 打印各种三角形
2019/06/28 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
公司联欢会策划方案
2014/05/19 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
Python打包为exe详细教程
2021/05/18 Python
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏