Tout en utilisant PhoneGap, il a un code JavaScript par défaut qui utilise document.addEventListener
, mais j'ai mon propre code qui utilise window.addEventListener
:
function onBodyLoad(){
document.addEventListener("deviceready", onDeviceReady, false);
document.addEventListener("touchmove", preventBehavior, false);
window.addEventListener('shake', shakeEventDidOccur, false);
}
Quelle est la différence et qui est préférable d'utiliser?
Les document
et window
sont des objets différents et ils ont des événements différents. Utiliser addEventListener()
sur ceux-ci écoute les événements destinés à un autre objet. Vous devez utiliser celui qui contient l'événement qui vous intéresse.
Par exemple, il existe un événement "resize"
Sur l'objet window
qui ne se trouve pas sur l'objet document
.
Par exemple, l'événement "DOMContentLoaded"
Ne concerne que l'objet document
.
Donc, fondamentalement, vous devez savoir quel objet reçoit l'événement qui vous intéresse et utiliser .addEventListener()
sur cet objet particulier.
Voici un tableau intéressant qui montre quels types d'objets créent quels types d'événements: https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference
Si vous écoutez un événement propagé (tel que l'événement click), vous pouvez écouter cet événement sur l'objet document ou sur l'objet window. La seule différence principale pour les événements propagés est le timing. L'événement atteindra l'objet document
avant l'objet window
car il apparaît en premier dans la hiérarchie, mais cette différence est généralement sans importance, vous pouvez donc choisir l'un ou l'autre. Je trouve généralement préférable de choisir l'objet le plus proche de la source de l'événement qui réponde à vos besoins lors du traitement des événements propagés. Cela suggérerait que vous choisissiez document
sur window
quand l'un ou l'autre fonctionnerait. Mais, souvent, je me rapprochais encore plus de la source et utilisais document.body
Ou même un parent commun plus proche dans le document (si possible).
Vous constaterez qu'en javascript, il existe généralement de nombreuses façons différentes de faire la même chose ou de trouver la même information. Dans votre exemple, vous recherchez un élément dont l'existence est garantie. window
et document
conviennent tous les deux (avec seulement quelques différences).
De réseau de développement mozilla :
addEventListener () enregistre un écouteur d'événement unique sur une cible unique. La cible d'événement peut être un élément unique dans un document, le document lui-même, une fenêtre ou un XMLHttpRequest.
Donc, tant que vous pouvez compter sur votre "cible" toujours présente, la seule différence réside dans les événements que vous écoutez, utilisez donc simplement votre favori.