2012-12-28 15 views
5

Qualcuno sa come attivare un evento in javascript per un elemento dopo che è stato aggiunto al DOM?Evento Javascript trigger su Aggiungi a DOM

L'idea generale è qualcosa di simile:

var elem = document.createElement('div'); 
elem.addEventListener('ON_ADD_TO_BODY', function(){console.log(elem.parentNode)}); 
//... LATER ON ... 
parentElemInBody.appendChild(elem); // <- Event is triggered here after append 

Ci sono alcune funzioni che non devono essere attivati ​​fino a quando si aggiunge l'elemento al DOM in modo che avrebbe senso ritardare l'esecuzione fino a quando si aggiunge l'elemento .

C'è un modo per farlo senza aver bisogno di chiamarli in seguito o dovrei fare qualche trucco che include un setTimeout e un controllo per vedere se l'elemento è stato già aggiunto al DOM?

risposta

7

Utilizzare l'evento di mutazione DOMNodeInserted.

Documenti qui: utilizzo https://developer.mozilla.org/en-US/docs/DOM/Mutation_events

esempio come indicato nella pagina di cui sopra:

element.addEventListener("DOMNodeInserted", function (ev) { 
    // ... 
}, false); 

Nota: 17 aprile 2016

mutazione eventi sono deprecate fin d'ora. L'approccio consigliato ora è Mutation Observers.

+0

Non sapevo nemmeno esistessero! Ho bisogno di supportare IE9- però :(e quei commenti sui risultati delle prestazioni non sono molto rassicuranti.So che non ho specificato che nella domanda così la tua risposta è corretta, ma ho bisogno di prendere in considerazione tutti. Esiste un approccio ibrido che, per lo meno, supporta IE9-? – sgcharlie

+0

Per i browser che non supportano quanto sopra, potrebbe essere necessario implementare un timer che controlli periodicamente i figli dell'elemento genitore e attiva alcune funzioni di callback. – techfoobar

+1

Gli eventi di mutazione sono deprecati per ora. Prendi in considerazione l'utilizzo di [Mutation Observers] (https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver). – ZitRo