2012-04-26 14 views
7

मैं अपने पृष्ठ पर कुछ करने के लिए दस्तावेज़.ready घटना का इंतजार कर रहा हूं।एचटीएमएल तत्वों को कक्षा प्राप्त होने तक प्रतीक्षा करें, फिर कुछ करें

कुछ अन्य स्क्रिप्ट, जिन्हें मैं नहीं बदल सकता, ने मेरी स्क्रिप्ट को एक बार बुलाए जाने के बाद भी अपना जादू नहीं किया है। इसलिए, वर्ग नाम पर jquery चयन विफल रहता है क्योंकि कक्षा अभी तक डोम में मौजूद नहीं है।

यही कारण है कि मैं अपने कार्य को तब तक सुनना चाहता हूं जब तक कोई तत्व एक निश्चित वर्ग न हो जाए, फिर उसके साथ कुछ करें।

मैं इसे कैसे प्राप्त करूं?

+0

क्या आप इस अन्य स्क्रिप्ट को नियंत्रित करते हैं? क्या आप अपना कोड दूसरे कोड के कॉलबैक के रूप में नहीं बुला सकते? – j08691

+0

या कस्टम स्क्रिप्ट को आग लगाने के लिए दूसरी स्क्रिप्ट प्राप्त करें – rgvcorley

+0

इस प्रश्न का डुप्लिकेट जैसा दिखता है: http://stackoverflow.com/questions/1950038/jquery-fire-event-if-css-class-changed –

उत्तर

3

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

उदाहरण:

$('#ele').addClass('theClass'); 
$(document).trigger('classGiven') 


$(document).bind('classGiven',function(){ 
    //do what you need 
}); 
12

कुछ इस (छद्म कोड) की तरह:

var timer = setInterval(function() { 
    if (element.className=='someclass') { 
     //run some other function 
     goDoMyStuff(); 
     clearInterval(timer); 
    } 
}, 200); 

या तत्व के लिए सुनने सम्मिलित करने के लिए:

function flagInsertedElement(event) { 
    var el=event.target; 
} 
document.addEventListener('DOMNodeInserted', flagInsertedElement, false); 

jQuery संस्करण:

$(document).on('DOMNodeInserted', function(e) { 
    if (e.target.className=='someclass') { 
     goDoMyStuff(); 
    } 
}); 

वहाँ भी liveQuery प्लगइन है :

$("#future_element").livequery(function(){ 
    //element created 
}); 

या यदि यह एक नियमित घटना हैंडलर है, तो jQuery के ऑन();

+0

टाइमर दृष्टिकोण एक आकर्षण की तरह काम किया। – k0pernikus

+0

उस पर तीन डाउनवॉट्स प्राप्त हुए, लेकिन एक साधारण सेट इंटरवल जैसे अधिक संसाधनों का उपयोग नहीं करता है और ठीक काम करता है, लेकिन अगर कक्षा कभी नहीं मिली तो कुछ प्रकार का अंत होना चाहिए, जैसे कि टाइमआउट फ़ंक्शन जो कुछ सेकंड के बाद अंतराल को साफ़ करता है । डाम नोड डालने के लिए jQuery funcion शायद इसे करने का सबसे अच्छा तरीका है, लेकिन जब तक हैंडलर को हटाया नहीं जाता है, तब तक जारी रहेगा, कक्षा नाम के लिए सभी सम्मिलित तत्वों की जांच कर रहा है, जो मेरी राय में एक सेट अंतराल से भी बदतर है। – adeneo

+0

@adeneo महान उत्तर, अच्छी तरह से किया, धन्यवाद :) –

0

अगर मैं आपके सवाल का गलत लेकिन क्यों सिर्फ document.ready पर इस रूप में कुछ सादे कर नहीं मैं माफी चाहता हूँ? :

$("#myelement").addClass('myclass'); 

if($("#myelement").hasClass('myclass')) { 
    alert('do stuff here'); 
} 
+0

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

+0

तो संभव है कि यदि संभव हो तो उस दूसरी स्क्रिप्ट में कॉलबैक बेहतर होगा? – Vytautas

संबंधित मुद्दे