2014-09-25 10 views
5

Desidero eseguire la delega degli eventi e acquisire tutti gli eventi che si verificano su un oggetto DOM da un gestore eventi associato all'intero documento. C'è qualche differenza tra vincolante gli eventi a window come in:Delega eventi e finestra contro window.document

window.addEventListener(event, function(e){ 
    var obj = e.target; 
    ... // if `obj` is a certain kind of object, then do something 
}, false); 

e window.document come nel seguente?

window.document.addEventListener(event, function(e){ 
    var obj = e.target; 
    ... // if `obj` is a certain kind of object, then do something 
}, false); 

event è un qualche tipo di evento come 'click', 'mouseover', ecc

risposta

4

C'è una differenza tra il window e window.document. window si riferisce alla parte visibile del browser e viene sempre caricato per primo. Lo window.document è il corpo della pagina in cui vengono visualizzati tutti i contenuti e DOM e include ad es. tutte le parti che sono nascoste fino a quando non scorrono a loro le rivela.

Gli eventi elencati sono eventi attivati ​​dall'utente e avranno sempre effetto sulla porta visualizzabile della finestra. Non riesco a pensare a nessuna situazione in cui dovresti ricevere per es. un evento click al di fuori della tua porta di visualizzazione. Per quanto ne so non puoi nemmeno generare un evento come quello che non è legato a un elemento specifico ma a una posizione sullo schermo. Lo stesso vale per gli eventi keyup, keydown, ....

Per rispondere alla domanda, non vi è alcuna differenza funzionale tra l'associazione degli eventi a window o window.document. L'unica cosa che è diversa è la proprietà this all'interno delle chiamate di funzione. Per me ha più senso legare un evento a window.document il DOM piuttosto che allo window.