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 相关文章推荐
通过Mootools 1.2来操纵HTML DOM元素
Sep 15 Javascript
Select标签下拉列表二级联动级联实例代码
Feb 07 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
Apr 16 Javascript
详解JavaScript编程中的数组结构
Oct 24 Javascript
js中最容易被忽视的事件问题大总结
May 15 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 Javascript
基于JavaScript实现全选、不选和反选效果
Feb 15 Javascript
webpack项目轻松混用css module的方法
Jun 12 Javascript
vue使用监听实现全选反选功能
Jul 06 Javascript
layui弹出层按钮提交iframe表单的方法
Aug 20 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
Apr 28 Javascript
vue中组件通信的八种方式(值得收藏!)
Aug 09 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文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
vue实现购物车列表
2020/06/30 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
Python使用Scrapy爬取妹子图
2015/05/28 Python
Python urls.py的三种配置写法实例详解
2017/04/28 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
小学生班会演讲稿
2014/01/09 职场文书
励志演讲稿200字
2014/08/21 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
放射科岗位职责
2015/02/14 职场文书
主持稿开场白
2015/06/01 职场文书
《夸父追日》教学反思
2016/02/20 职场文书
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers