2014-04-15 7 views
6

Come molti altri che uso:C'è un motivo per rimuovereEventListener DOMContentLoaded dopo che l'evento è stato gestito?

document.addEventListener('DOMContentLoaded',domLoadedFunc,!1); 

In combinazione con window.onload per gestire gli eventi che dovrebbero sparare non appena il DOM è stato caricato e analizzato.

Mi chiedevo se c'è un motivo per rimuovere esplicitamente il listener DOMContentLoaded dopo che è stato generato.

Qualcosa sulla falsariga di (all'interno del nostro domLoadedFunc):

if(document.removeEventListener){ 
    document.removeEventListener('DOMContentLoaded',domLoadedFunc,!1); 
} 

C'è una ragione per rimuovere l'ascoltatore DOMContentLoaded una volta che ha sparato?

+3

No, non proprio, si attiva solo una volta, ed è solo un gestore di eventi, non si romperà nulla, quindi non c'è una buona ragione per rimuoverlo esplicitamente, ma non farà del male a nessuno, quindi qualsiasi cosa faccia galleggiare la tua capra . – adeneo

+0

Avrei bisogno di chiamare 'document.removeEventListener', ma potrei considerare di aggiungere l'opzione' {once: true} 'quando registri l'evento – Endless

risposta

3

Una volta che l'evento è stato attivato, non sparerà più. Pertanto, il tuo codice non avrà alcun risultato diverso se lo rimuovi o meno una volta che ha sparato la prima volta.

Tecnicamente, se ci fossero molti gestori di eventi tutti collegati all'oggetto documento, potrebbe essere sempre leggermente più veloce rimuovere i gestori di eventi che non sono più necessari, ma questo è bilanciato con il codice aggiuntivo che scrivi ed esegui solo per rimuoverlo.

Personalmente, codifico con pensieri in questa sequenza di priorità: correttezza, affidabilità, leggibilità, manutenibilità, semplicità e quindi prestazioni e faccio qualsiasi cosa puramente per il gusto delle prestazioni quando è effettivamente necessario. Quindi, seguendo questa gerarchia, non rimuoverei il gestore di eventi perché farlo non è necessario per nessuna delle prime quattro priorità, non aiuta la semplicità del codice e non è un problema di prestazioni che conta.


L'uno dei motivi che ho visto per la rimozione di un gestore di eventi come questo è se si dispone di più eventi si stanno monitorando e una volta che il primo è attivato, si vuole fare in modo che non si risponde a qualsiasi altro evento che stai monitorando. Se rimuovi gli altri gestori, non devi tenere un contrassegno separato per tenere traccia del fatto che hai già svolto il tuo lavoro (ad esempio, se stavi ascoltando sia per DOMContentLoaded e window.onload e volevi solo rispondere a qualsiasi uno accaduto prima.


Cordiali saluti, se siete interessati in una pianura javascript versione di jQuery di $(document).ready() che funziona in tutti i browser (usa DOMContentLoaded quando disponibile, ricade ad altri mezzi se non) che sembra che tu stia lavorando, c'è un'implementazione semplice e intuitiva di una funzione chiamata docReady() qui: pure JavaScript equivalent to jQuery's $.ready() how to call a function when the page/dom is ready for it che puoi utilizzare o copiare/imparare concetti da.

Problemi correlati