JavaScript 事件流方向

在事件流的方向问题上,DOM2 综合了IE4 和NN4 的事件回溯和下传的做法:

事件下传阶段:该过程模仿 NN4 中事件流的流动过程,事件从继承关系的顶端开始搜索,直到到达目标对象为止。事件在下传过程中,可被当前的事件处理器先处理或者改向。一旦到达目标对象,该事件的处理器立即被触发。

事件上溯过程:事件到达目标对象之后,将模仿IE4 中事件流的流动过程,沿着继承关系上溯至顶端,在上溯的过程中调用每一层相应的事件处理器。

事件上溯过程并不是必须的,只有当程序员在该事件下传过程中以 NN4 的方式显示捕获过此事件时,事件上溯过程才发生。

在事件下传和上溯过程中,DOM2 引入了“事件监听器”概念对事件处理器和对象进行捆绑。

事件监听器本质上也是一种事件处理器,只不过它被绑定在对象继承关系的特定节点上,并可在事件生命周期的特定阶段被触发。

DOM2 使用节点的addEventListener()方法和deleteEventListener()方法分别对事件监听器进行绑定和删除。

在事件的流动过程中,DOM2 提供节点的dispatchEvent()方法来将当前事件改向,该方法以当前Event 对象为参数。

目标节点使用该方法后,变为新的事件节点,事件将按照正常的继承关系传递到其他的目标。