document.addEventListener和window.addEventListener之间的区别?
当使用PhoneGap时,它有一些使用document.addEventListener
默认JavaScript代码,但是我有自己的代码,使用window.addEventListener
:
function onBodyLoad(){ document.addEventListener("deviceready", onDeviceReady, false); document.addEventListener("touchmove", preventBehavior, false); window.addEventListener('shake', shakeEventDidOccur, false); }
有什么区别,哪个更好用?
document
和window
是不同的对象,它们有一些不同的事件。 在它们上使用addEventListener()
来监听指定给不同对象的事件。 你应该使用真正有兴趣的事件。
例如, window
对象上不存在document
对象上的"resize"
事件。
例如, "DOMContentLoaded"
事件只在document
对象上。
所以基本上,您需要知道哪个对象接收到您感兴趣的事件,并在该特定对象上使用.addEventListener()
。
下面是一个有趣的图表,显示哪种types的对象创build哪种types的事件: https : //developer.mozilla.org/en-US/docs/DOM/DOM_event_reference
如果您正在侦听传播的事件(如单击事件),则可以在文档对象或窗口对象上侦听该事件。 传播事件唯一的主要区别在于时机。 事件将在window
对象之前碰到document
对象,因为它首先出现在层次结构中,但是这种差异通常是不重要的,所以您可以select其中之一。 我发现在处理传播事件时,select最符合事件源的事件通常会更好。 这意味着你可以在window
selectdocument
。 但是,我经常更接近源document.body
,甚至在文档中使用document.body
或者更接近的通用父项(如果可能的话)。
你会发现,在JavaScript中,通常有许多不同的方法来做同样的事情或find相同的信息。 在你的例子中,你正在寻找一些保证永远存在的元素。 window
和document
都符合法案(只有一些差异)。
从mozilla开发networking :
addEventListener()在单个目标上注册单个事件侦听器。 事件目标可以是文档中的单个元素,文档本身,窗口或XMLHttpRequest。
所以只要你能指望你的“目标”总是在那里,唯一的区别就是你正在听的是什么事件,所以就用你最喜欢的。