Web前端学习

JS学习之事件冒泡和事件捕获

2019-01-14  本文已影响0人  Renaissance_

前一段时间接到了几个电话面试,问的问题都是每个方面很基础的问题,平时太过于注重业务的实现,没有深究过基本的原理,今天就分享一个问题JS中的时间冒泡和事件绑定。


注:此文为转载;

事件的几种类型:

事件从最特定的目标到最不特定的目标对象(document)顺序进行触发
IE 5.5: div -> body -> document
IE 6.0: div -> body -> html -> document
Mozilla 1.0: div -> body -> html -> document -> window

事件从最不特定的目标对象(document)到最特定的目标对象的书序进行触发。

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

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

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


假设一个元素div,它有一个下级元素p。
<div>  < p > 元素 </ p></div>
这两个元素都绑定了click事件,如果用户点击了p,它在div和p上都触发了click事件,那这两个事件处理程序哪个先执行呢?事件顺序是什么?
** 两种模型**以前,Netscape和Microsoft是不同的实现方式。

上一篇 下一篇

猜你喜欢

热点阅读