2012-12-28 16 views
5

पर जोड़ने पर ट्रिगर जावास्क्रिप्ट इवेंट क्या कोई जानता है कि डीओएम में जोड़े जाने के बाद किसी तत्व के लिए जावास्क्रिप्ट में किसी ईवेंट को ट्रिगर कैसे करें?डीओएम

सामान्य विचार कुछ इस तरह है:

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 

कुछ कार्यों कि जब तक आप डोम के लिए तत्व जोड़ तो यह समझ बनाने होगा निष्पादन में देरी करने के लिए जब तक तत्व जोड़ दिया जाता है ट्रिगर नहीं किया जाना चाहिए ।

क्या इसे बाद में कॉल करने की स्पष्ट आवश्यकता के बिना ऐसा करने का कोई तरीका है या मुझे कुछ हैक करना चाहिए जिसमें setTimeout शामिल है और यह देखने के लिए एक जांच है कि तत्व अभी तक डोम में जोड़ा गया है या नहीं?

उत्तर

7

DOMNodeInserted उत्परिवर्तन ईवेंट का उपयोग करें। यहाँ

डॉक्स: https://developer.mozilla.org/en-US/docs/DOM/Mutation_events

उदाहरण उपयोग ऊपर पेज में दिए गए:

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

नोट: 17 वीं अप्रैल, वर्ष 2016

उत्परिवर्तन घटनाक्रम अब तक पदावनत कर रहे हैं। अनुशंसित दृष्टिकोण अब Mutation Observers है।

+0

मुझे उन लोगों को भी पता नहीं था! मुझे IE9 का समर्थन करने की आवश्यकता है- हालांकि :(और प्रदर्शन हिट पर उन टिप्पणियां बहुत आश्वस्त नहीं हैं। मुझे पता है कि मैंने इस प्रश्न में निर्दिष्ट नहीं किया है कि आपका उत्तर सही है लेकिन मुझे इसे सभी को ध्यान में रखना होगा। क्या कोई संकर दृष्टिकोण है, कम से कम, आईई 9- – sgcharlie

+0

का समर्थन करता है जो उपरोक्त का समर्थन नहीं करते हैं, आपको एक टाइमर रोल करना पड़ सकता है जो समय-समय पर मूल तत्व के बच्चों की जांच करता है और कुछ कॉलबैक ट्रिगर करता है। – techfoobar

+1

उत्परिवर्तन घटनाओं को अब के लिए बहिष्कृत किया गया है। इसके बजाय [उत्परिवर्तन पर्यवेक्षकों] (https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) का उपयोग करने पर विचार करें। – ZitRo