博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js之事件冒泡和事件捕获
阅读量:4324 次
发布时间:2019-06-06

本文共 1030 字,大约阅读时间需要 3 分钟。

今天看到阿里的一道面试题:

  • 如果给一个元素绑定了4个事件处理(用addEventListener),其中两个是capture, 两个冒泡,那么触发顺序是什么?

看完之后开始找答案,然后写个栗子测试了一下:

    
Document

测试结果如下:

ie6:结果是随机的;

ie7-8结果如下图:

ie9结果如下图:

非ie浏览器结果如下:

由于ie7~ie9测试结果我是用浏览器模拟的,不确定这几种浏览器版本的结果准确性,由此可看,执行顺序应该是这样的:

捕获比冒泡先触发,但同级哪个函数先触发,不同浏览器有差异。非IE浏览器是按照绑定顺序执行,IE好像是随机(ps:我在js高级程序设计一书中中看到是这样说的----这些事件处理程序不是已添加它们的顺序执行,而是以相反的顺序被触发)。

下面我对如上知识做一下补充:

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

(2)捕获型事件(event capturing):事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。

(3)DOM事件流:同时支持两种事件模型:捕获型事件和冒泡型事件,但是,捕获型事件先发生。两种事件流会触及DOM中的所有对象,从document对象开始,也在document对象结束。

支持W3C标准的浏览器在添加事件时用addEventListener(event,fn,useCapture)方法,基中第3个参数useCapture是一个Boolean值,用来设置事件是在事件捕获时执行,还是事件冒泡时执行。而不兼容W3C的浏览器(IE)用attachEvent()方法,此方法没有相关设置,不过IE的事件模型默认是在事件冒泡时执行的,也就是在useCapture等于false的时候执行,所以把在处理事件时把useCapture设置为false是比较安全,也实现兼容浏览器的效果。

事件捕获阶段:事件从最上一级标签开始往下查找,直到捕获到事件目标(target)。

事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签。

//冒泡

转载于:https://www.cnblogs.com/imsomnus/p/4773168.html

你可能感兴趣的文章
CF414BMashmokh and ACMDP
查看>>
Notepad++ 通过g++编译
查看>>
JAVA基础2——类初始化相关执行顺序
查看>>
转:Zend Framework 重定向方法(render, forward, redirect)
查看>>
Linux下查看磁盘与目录的容量——df、du
查看>>
关于日记app的思考
查看>>
使用sencha的cmd创建项目时提示找不到\Sencha\Cmd\repo\.sencha\codegen.json
查看>>
如何快速启动一个Java Web编程框架
查看>>
MSP430单片机存储器结构总结
查看>>
文本框过滤特殊符号
查看>>
教育行业安全无线网络解决方案
查看>>
7个杀手级的开源监测工具
查看>>
软件架构学习小结
查看>>
C语言实现UrlEncode编码/UrlDecode解码
查看>>
返回用户提交的图像工具类
查看>>
树链剖分 BZOJ3589 动态树
查看>>
挑战程序设计竞赛 P131 区间DP
查看>>
【例9.9】最长公共子序列
查看>>
NSFileManager打印目录下的文件的函数
查看>>
JavaScript 循环绑定之变量污染
查看>>