我在网上看到的大部分代码都使用了document.onkeydown
,但MDN只列出了window.onkeydown
。 This comment还建议使用window.onkeydown
。是否存在使用其中一个的差异或理由?
答案 0 :(得分:9)
请参阅Event dispatch and DOM event flow中的以下图表:
有三个event phases:
捕获阶段:事件对象必须通过目标的祖先从defaultView传播到目标的父级。 此阶段也称为捕获阶段。事件听众 注册到此阶段必须在事件到达之前处理 目标
目标阶段:事件对象必须到达事件对象event target。这个阶段也被称为 at-target 阶段。为此阶段注册的事件侦听器必须在事件达到其目标后处理该事件。如果event type表示事件不得冒泡,则为事件对象 必须在这个阶段完成后停止。
泡沫阶段:事件对象以相反的顺序传播到目标的祖先,从目标的父母开始 并以defaultView结尾。这个阶段也被称为 冒泡阶段。在此阶段注册的事件侦听器必须在事件达到目标后处理该事件。
因此,主要区别在于添加到window
的事件侦听器将在事件侦听器添加到document
后处理泡沫阶段时处理事件;在捕获阶段之前。