2012-08-09 4 views
7

मैं एक तत्व (.this_button) पर एक फ़ंक्शन चलाने की कोशिश कर रहा हूं जिसे गतिशील रूप से लोड किया जा रहा है। इम निम्नलिखित कोड का उपयोग कर:नए तत्व का लोड, प्रतिनिधि/चालू?

$(function(){ 
    $("body").on("load", ".this_button", function() { 
     console.log("its been loaded"); 
    }); 
}); 

मैं delegate की कोशिश की है, लेकिन यह कहते हैं अपनी on के पक्ष में पदावनत किया गया। कुछ तत्वों को धक्का दिया जा सकता है, दस्तावेज़ के 10 मिनट पहले लोड होने के बाद कहें। यह लगातार जांच कैसे कर सकता है कि कोई तत्व .this_button शरीर में प्रवेश कर चुका है या नहीं?

कोई भी जानता है कि यह क्यों काम नहीं कर रहा है?

+0

यह गतिशील रूप से कहां जोड़ा जाता है? क्या आप बस इस समारोह को जोड़ नहीं सकते? –

+0

@rocky नहीं, इस तत्व में एक स्क्रिप्ट नहीं हो सकती है। इसे डेटाबेस से लोड किया जा रहा है और यह चीजों को जटिल करेगा –

+0

'} है): 'वास्तव में आपके पास अंत में क्या है? मुझे लगता है कि '} होना चाहिए);' –

उत्तर

9

documentation से:

"सभी ब्राउज़रों, लोड, पुस्तक, और त्रुटि की घटनाओं (जैसे, एक तत्व पर) में बुलबुला नहीं है [...] इस तरह की घटनाओं के प्रतिनिधिमंडल के साथ उपयोग के लिए समर्थित नहीं हैं। , लेकिन उनका उपयोग तब किया जा सकता है जब ईवेंट हैंडलर सीधे उत्पन्न करने वाले तत्व से जुड़ा हुआ हो। "

+3

कोई विकल्प नहीं है' पृष्ठ को बटन में जोड़ा जाने वाला क्या ट्रिगर करता है? क्या आप इसे एक ही चीज़ से जोड़ सकते हैं? –

11

on विधि वर्तमान में चयनित तत्वों के लिए ईवेंट को संभाल लेगा जब इसे पहले निष्पादित किया गया हो या भविष्य के तत्व जो एक विशिष्ट चयनकर्ता से मेल खाने वाली किसी विशेष घटना को उठाएंगे। चूंकि किसी पृष्ठ में कोई तत्व जोड़ा जा रहा है, इसलिए load या किसी अन्य प्रकार की घटना को स्वचालित रूप से नहीं बढ़ाया जाता है, इसलिए आपके कोड को आपके नए जोड़े गए तत्वों के लिए कभी भी निष्पादित नहीं किया जाएगा।

आपके पास दो विकल्प हैं। जब भी आपका नया तत्व डाला जा रहा हो तो पहला कस्टम ईवेंट ट्रिगर करना है। उदाहरण के लिए,

$.get("/newElemnet", function(newElement) { 
    $('#placeToInsertElement').append(newElement); 
    $(newElement).trigger('newElementAdded'); 
}); 

फिर अपने मूल कार्य है कि कस्टम घटना के लिए सुन होगा:

$(function(){ 
    $("body").on("newElementAdded", ".this_button", function() { 
     console.log("its been loaded"); 
    }); 
}); 

दूसरा विकल्प लगातार नए तत्वों को इस question में वर्णित के रूप के लिए मतदान पर है।

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