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 相关文章推荐
html读出文本文件内容
Jan 22 Javascript
Jquery读取URL参数小例子
Aug 30 Javascript
Javascript 实现的数独解题算法网页实例
Oct 15 Javascript
js获得页面的高度和宽度的方法
Feb 23 Javascript
javascript结合fileReader 实现上传图片
Jan 30 Javascript
js兼容火狐显示上传图片预览效果的方法
May 21 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
Apr 15 Javascript
javascript 四十条常用技巧大全
Sep 09 Javascript
Node.js调试技术总结分享
Mar 12 Javascript
springmvc接收jquery提交的数组数据代码分享
Oct 28 jQuery
Vuejs2 + Webpack框架里,模拟下载的实例讲解
Sep 05 Javascript
vue与原生app的对接交互的方法(混合开发)
Nov 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入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
php字符集转换
2017/01/23 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
用Javascript获取页面元素的具体位置
2013/12/09 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
JS+H5 Canvas实现时钟效果
2018/07/20 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
Python的ORM框架中SQLAlchemy库的查询操作的教程
2015/04/25 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Linux下python制作名片示例
2018/07/20 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
python迭代器常见用法实例分析
2019/11/22 Python
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
文秘大学生求职信
2014/02/25 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
八项规定整改方案
2014/10/01 职场文书
民主评议党员总结
2014/10/20 职场文书
合作合同协议书范本
2015/01/27 职场文书