1、面试必问的问题
2、在过去糟糕的日子里,浏览器的兼容性比如今要小得多,Netscape(网景)只使用事件捕获,而Internet Explorer只使用事件冒泡。当W3C决定尝试规范这些行为并达成共识时,他们最终获得了包括这两种状况(捕捉和冒泡)的系统,最终被应用在如今浏览器里。
3、容易把事件委托理解为单独的执行阶段
1、事件捕获和冒泡是现代浏览器的执行事件的两个不一样阶段
2、事件委托是利用冒泡阶段的运行机制来实现的
运行条件:当一个事件发生在具备父元素的的元素上时,现代浏览器根据事件添加时的设置来执行(冒泡或者捕获)
经过 addEventListener() 的第三个属性来设置事件是经过捕获阶段注册的(true),仍是冒泡阶段注册的(false)。默认状况下是false。html
从实际操做的元素(事件)向上级父元素一级一级执行下去,直到达到<html>
有些时候父元素和子元素都定义了click事件,可是不但愿点击子元素的时候执行父元素的click事件(例如dialog弹窗的遮罩层若是是父元素,而dialog弹窗内容层是子元素,同时能够经过点击遮罩层来关闭弹窗,可是点击内容层不关闭弹窗),能够经过stopPropagation()在子元素上阻止冒泡。
浏览器检查元素的最外层祖先<html>,是否在捕获阶段中注册了一个onclick事件处理程序,若是是,则运行它。
而后,它移动到<html>中的下一个元素(点击的元素的父元素),并执行相同的操做,而后是下一个元素(点击的元素的父元素),依此类推,直到到达实际点击的元素。
执行顺序的不一样
冒泡:jquery
捕获:面试
若是你想要在大量子元素(包括动态添加的)中单击任何一个就能够运行一段代码,这个时候能够把事件监听器设置在父节点上。 实现方式 jquery 中的 on