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的超简单上下翻
Apr 20 Javascript
JS自动缩小超出大小的图片
Oct 12 Javascript
jquery对元素拖动排序示例
Jan 16 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
JS实现队列与堆栈的方法
Apr 21 Javascript
require简单实现单页应用程序(SPA)
Jul 12 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
Jul 11 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
Dec 25 Javascript
小程序实现展开/收起的效果示例
Sep 22 Javascript
解决layui 表单元素radio不显示渲染的问题
Sep 04 Javascript
使用js实现一个简单的滚动条过程解析
Sep 10 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
Feb 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
mysql 字段类型说明
2007/04/27 PHP
php图片缩放实现方法
2014/02/20 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
webpack构建的详细流程探底
2018/01/08 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
vue 实现图片懒加载功能
2020/12/31 Vue.js
Python编码类型转换方法详解
2016/07/01 Python
Python实现的中国剩余定理算法示例
2017/08/05 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
python有几个版本
2020/06/17 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
一月红领巾广播稿
2014/02/11 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
校长四风对照检查材料
2014/09/27 职场文书
代收款委托书范本
2014/10/01 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
故宫英文导游词
2015/01/31 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP