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 相关文章推荐
mouse_on_title.js
Aug 25 Javascript
再论Javascript的类继承
Mar 05 Javascript
js中复制行和删除行的操作实例
Jun 25 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
Jul 31 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
Aug 28 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 Javascript
Angular设置别名alias的方法
Nov 08 Javascript
react koa rematch 如何打造一套服务端渲染架子
Jun 26 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
Sep 23 Javascript
Element Input输入框的使用方法
Jul 26 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
Sep 27 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
Nov 01 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
终于听上了直流胆调频
2021/03/02 无线电
PHP JWT初识及其简单示例
2018/10/10 PHP
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
jQuery使用each方法与for语句遍历数组示例
2016/06/16 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
js实现旋转木马效果
2017/03/17 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
Python处理session的方法整理
2019/08/29 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
yy结婚证婚词
2014/01/10 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
设计顾问服务计划书
2014/05/04 职场文书
助理政工师申报材料
2014/06/03 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
2015年科普工作总结
2015/07/23 职场文书
公司新员工欢迎词
2015/09/30 职场文书
七年级语文教学反思
2016/03/03 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python