事件冒泡与捕获

一个事件的处理方式有两种:捕获——首先被顶部元素捕获,并依次向下传递

                                               冒泡——目标元素捕获后,事件转向冒泡,从目标元素向顶部元素冒泡。

可以通过向addEventListener 传递参数,自行选择事件的处理顺序。第三个参数若传入 true ,将采用事件捕获;若传入 false ,则采用事件冒泡,但是W3C标准默认的是事件冒泡。(所以为什么不是 true 就采用事件冒泡呢*)

一个事件可以触发多次事件处理器的执行,每个事件处理器可以是捕获或者冒泡模式。所以事件首先通过捕获,从顶部元素传递到目标元素。当到达目标元素时,会**冒泡模式,从目标元素回到顶部元素。就是事件自顶向下,执行所有捕获模式的处理器;当到达目标元素时,事件冒泡到顶部,执行所有冒泡模式的处理器。

 

事件处理器中的this 关键字,强调this关键字指向的是事件处理器注册的元素,不一定是发生事件的元素。而event.target 指向的是事件发生的元素。

结果如下:

this 指向 innerContainer 元素,因为指向的是当前处理器注册的元素;event.target  属性指向的是innerContainer 元素, 因为其指向的是事件发生的元素

后来事件冒泡到 outerContainer 元素, 这时this 指向的 是 outerContainer 元素, 指向注册元素,但是event.target 指向的是 innerContainer 元素,因为 innerContainer 才是事件发生的元素。