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 相关文章推荐
各种常用的JS函数整理
Oct 25 Javascript
jquery设置按钮停顿3秒不可用
Mar 07 Javascript
jQuery中的编程范式详解
Dec 15 Javascript
jQuery实现的输入框选择时间插件用法实例
Feb 28 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
Mar 05 Javascript
微信小程序使用form表单获取输入框数据的实例代码
May 17 Javascript
使用canvas实现一个vue弹幕组件功能
Nov 30 Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 Javascript
小程序数据通信方法大全(推荐)
Apr 15 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
Apr 20 Javascript
Javascript模块化机制实现原理详解
Apr 02 Javascript
浅谈js数组splice删除某个元素爬坑
Oct 14 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
PHP 函数执行效率的小比较
2010/10/17 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
js控制input输入字符解析
2013/12/27 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
vue2路由方式--嵌套路由实现方法分析
2020/03/06 Javascript
利用js实现简易红绿灯
2020/10/15 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
在Python程序中实现分布式进程的教程
2015/04/28 Python
python3实现网页版raspberry pi(树莓派)小车控制
2020/02/12 Python
通过python检测字符串的字母
2020/02/18 Python
Python文件操作的面试题
2013/06/22 面试题
品酒会策划方案
2014/05/26 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
Python制作动态字符画的源码
2021/08/04 Python
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers