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 相关文章推荐
读jQuery之二(两种扩展)
Jun 11 Javascript
js判断上传文件类型判断FileUpload文件类型代码
May 20 Javascript
Javascript基础教程之数组 array
Jan 18 Javascript
JavaScript改变CSS样式的方法汇总
May 07 Javascript
jquery的幻灯片图片切换效果代码分享
Sep 07 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
Aug 18 Javascript
详解JS: reduce方法实现 webpack多文件入口
Feb 14 Javascript
详解vue 配合vue-resource调用接口获取数据
Jun 22 Javascript
js编写简单的聊天室功能
Aug 17 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
Dec 16 jQuery
vue axios重复点击取消上一次请求封装的方法
Jun 19 Javascript
python实现迭代法求方程组的根过程解析
Nov 25 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
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
Bootstrap CSS布局之图像
2016/12/17 Javascript
Vue-Router基础学习笔记(小结)
2018/10/15 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
python实现拓扑排序的基本教程
2018/03/11 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
使用python实现kNN分类算法
2019/10/16 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
华为C++笔试题
2014/08/05 面试题
考试退步检讨书
2014/01/15 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
小学语文教师研修日志
2015/11/13 职场文书
Golang解析JSON对象
2022/04/30 Golang