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 相关文章推荐
原生JavaScript实现连连看游戏(附源码)
Nov 05 Javascript
javascript中with()方法的语法格式及使用
Aug 04 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
Jan 09 Javascript
JavaScript使用replace函数替换字符串的方法
Apr 06 Javascript
原生JavaScript实现瀑布流布局
Jun 28 Javascript
对Js OOP编程 创建对象的一些全面理解
Jul 26 Javascript
AngularJS $injector 依赖注入详解
Sep 14 Javascript
JS函数节流和函数防抖问题分析
Dec 18 Javascript
React中嵌套组件与被嵌套组件的通信过程
Jul 11 Javascript
JS隐藏号码中间4位代码实例
Apr 09 Javascript
分享一款超好用的JavaScript 打包压缩工具
Apr 26 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
Oct 14 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 面向对象实现代码
2009/11/11 PHP
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
JS跨域总结
2012/08/30 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
node实现简单的反向代理服务器
2017/07/26 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
[51:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python yield 小结和实例
2014/04/25 Python
Python最长公共子串算法实例
2015/03/07 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
python在不同条件下的输入与输出
2020/02/13 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
大学生个人推荐信范文
2013/11/25 职场文书
国家税务局干部作风整顿整改措施
2014/09/18 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers