javascript事件捕获机制【深入分析IE和DOM中的事件模型】


Posted in Javascript onDecember 15, 2016

本文实例分析了javascript事件捕获机制。分享给大家供大家参考,具体如下:

1.什么是事件冒泡?

在排序算法中,我们学过冒泡排序法,所谓冒泡就是让底层的东西浮出水面,对于事件冒泡也同样是如此,

下面我们来看一个例子来说明什么是事件冒泡。

<div>
 <button>测试</button>
</div>
<script>
 $("div").bind("click",function(){alert("div")});
 $("button").bind("click",function(){alert("button"});
</script>

当支持事件冒泡时,当我们点击"测试”按钮时,首先会执行的是alert("button"),固名思意:

事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。

当div,button,html根元素都有事件时,事件执行的顺序为:

button->div->html

2.什么是事件捕获?

我们再来看事件捕获,相对于事件捕获,处理时间的顺序与事件冒泡截然相反,同样:

<div>
 <button>测试</button>
</div>
<script>
 $("div").bind("click",function(){alert("div")});
 $("button").bind("click",function(){alert("button"});
</script>

执行这段代码,首先会alert("div"),其次会alert("button")。我们明确事件捕获的概念:

事件从最不精确的对象(document 对象)开始触发,然后到最精确。

同样的如果button,div,html元素上都有绑定事件,那么事件的实行顺序为:

html->div->button

3.各个版本的浏览器对事件的处理机制?

(1)在DOM中,即支持事件冒泡,也支持事件捕获,在W3C的标准中,认为任何事件都是从事件捕获出发,找到最终的结点,此后再进行冒泡,会到根结点。

DOM中支持事件绑定的函数为:

addEventListener("事件名",函数,userCapture);

对于userCapture参数,默认为false,支持事件冒泡。
若在userCapture参数,为true时,支持事件捕获。

(2)对于很多浏览器,都支持addEventListener方法,但是IE不支持!

(3) IE中的事件处理机制,IE中只支持事件冒泡,IE中有一个独有的事件绑定方法

attachEvent方法,此方法有两个参数:

attachEvent("事件名","函数名")

4.如何阻止事件的传播?

无论是事件冒泡还是事件捕获都是可以阻止的。

(1)首先在W3C中阻止事件的传播方法为:stopPropagation(),在IE中,通过设置

cancelBubble=true;

(2) 如何阻止事件的默认行为?在W3C标准中,使用preventDefault方法,在IE中通过设置

window.event.returnValue = false;

PS:关于javascript常用事件及相关说明还可参考本站在线工具:

javascript事件与功能说明大全:
http://tools.3water.com/table/javascript_event

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
在网页中控制wmplayer播放器
Jul 01 Javascript
关于js datetime的那点事
Nov 15 Javascript
Jquery在指定DIV加载HTML示例代码
Feb 17 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
Mar 03 Javascript
javascript单页面手势滑屏切换原理详解
Mar 21 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
Apr 08 Javascript
JS前向后瞻正则表达式定义与用法示例
Dec 27 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
Feb 17 Javascript
解决低版本的浏览器不支持es6的import问题
Mar 09 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
Oct 09 Javascript
extract-text-webpack-plugin用法详解
Feb 14 Javascript
微信小程序如何调用图片接口API并居中显示
Jun 29 Javascript
手机软键盘弹出时影响布局的解决方法
Dec 15 #Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Dec 15 #Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
Dec 15 #Javascript
JavaScript实现Fly Bird小游戏
Dec 15 #Javascript
JS中对数组元素进行增删改移的方法总结
Dec 15 #Javascript
JS去除重复并统计数量的实现方法
Dec 15 #Javascript
javascript基于原型链的继承及call和apply函数用法分析
Dec 15 #Javascript
You might like
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
学习php设计模式 php实现备忘录模式(Memento)
2015/12/09 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
javascript里的条件判断
2007/02/27 Javascript
ext实现完整的登录代码
2008/08/08 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
浅谈Django REST Framework限速
2017/12/12 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
python重要函数eval多种用法解析
2020/01/14 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
农村婚礼证婚词
2014/01/08 职场文书
医学生个人求职信范文
2014/02/07 职场文书
企业党员公开承诺书
2014/03/26 职场文书
同学聚会感言一句话
2015/07/30 职场文书
用Python提取PDF表格的方法
2021/04/11 Python