window.onkeydown和document.onkeydown之间有区别吗?

时间:2014-11-22 01:34:11

标签: javascript

我在网上看到的大部分代码都使用了document.onkeydown,但MDN只列出了window.onkeydownThis comment还建议使用window.onkeydown。是否存在使用其中一个的差异或理由?

1 个答案:

答案 0 :(得分:9)

请参阅Event dispatch and DOM event flow中的以下图表:

graphical representation of an event dispatched in a DOM tree using the DOM event flow

有三个event phases

  
      
  • 捕获阶段:事件对象必须通过目标的祖先从defaultView传播到目标的父级。   此阶段也称为捕获阶段。事件听众   注册到此阶段必须在事件到达之前处理   目标

  •   
  • 目标阶段:事件对象必须到达事件对象event target。这个阶段也被称为    at-target 阶段。为此阶段注册的事件侦听器必须在事件达到其目标后处理该事件。如果event type表示事件不得冒泡,则为事件对象   必须在这个阶段完成后停止。

  •   
  • 泡沫阶段:事件对象以相反的顺序传播到目标的祖先,从目标的父母开始   并以defaultView结尾。这个阶段也被称为   冒泡阶段。在此阶段注册的事件侦听器必须在事件达到目标后处理该事件。

  •   

因此,主要区别在于添加到window的事件侦听器将在事件侦听器添加到document后处理泡沫阶段时处理事件;在捕获阶段之前。