2012-12-28 14 views
5

DOM'a eklendikten sonra bir öğe için javascript'te bir olayı nasıl tetikleyeceğini bilen var mı?Trigger Javascript Olayı DOM'a ekle

genel bir fikir böyle bir şeydir:

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 

eleman eklenene kadar bu yürütme geciktirmek için mantıklıdır böylece DOM eleman eklemek kadar tetiklenen gereken bir takım işlevler vardır .

Bunu daha sonra açık bir şekilde aramak gerekmeden yapmanın bir yolu var mı, yoksa setTimeout'u içeren bir hack yapmalı ve öğenin henüz DOM'a eklenip eklenmediğini görmek için bir kontrol yapmalı mıyım?

cevap

7

DOMNodeInserted mutasyon olayını kullanın. Burada

Dokümanlar: https://developer.mozilla.org/en-US/docs/DOM/Mutation_events

Örnek kullanım yukarıdaki sayfada verilmiştir gibidir:

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

Not: 17 Nisan 2016

Mutasyon Olaylar bugün itibariyle artık yok. Önerilen yaklaşım şu an Mutation Observers.

+0

Bunların var olduğunu bile bilmiyordum! IE9-olsa desteklemeye ihtiyacım var :(ve performans isabetleri üzerine yapılan yorumlar çok güven verici değil, biliyorum ki, cevabın doğru olduğunu söylemedim, ama hepsini hesaba katmam gerek. En azından, IE9-? – sgcharlie

+0

'u destekleyen bir melez yaklaşımı var. Yukarıdakileri desteklemeyen tarayıcılarda, üst öğenin alt öğelerini düzenli olarak denetleyen ve bazı geri bildirimleri tetikleyen bir zamanlayıcıyı açmanız gerekebilir. – techfoobar

+1

Mutasyon olayları şimdilik şimdilik kullanımdan kaldırılmıştır: [Mutation Observers] (https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) yerine – ZitRo