2010-03-10 19 views
5

का उपयोग करके नहीं पाया जा सकता है मैं HTML में एक पेड़ ब्राउज़र को कार्यान्वित कर रहा हूं। नोड पर क्लिक करने पर, मैं एक फ़ंक्शन को कॉल करता हूं जो नोड के बाल तत्व जोड़ता है। अब तक सब ठीक है। अब मैं इसे विस्तारित करने के लिए बाल तत्वों में से एक के क्लिक हैंडलर को तत्काल आमंत्रित करना चाहता हूं। मेरी समस्या यह है कि jQuery को उन तत्वों को नहीं मिला जिन्हें अभी जोड़ा गया है। जब मैं डीबगर में कदम उठाता हूं, तो नए तत्वों को ब्राउजर द्वारा प्रदान किए जाने से पहले तत्वों को ढूंढने के लिए मेरे कोड को बुलाया जा रहा है, जिसे मैं अनुमान लगा रहा हूं समस्या है।गतिशील रूप से जोड़ा गया एचटीएमएल तत्व jQuery

क्या कोई ऐसी घटना है जिसके लिए मैं इंतजार कर सकता हूं (शायद ऑनलोड के समान) जो कि जब जोड़ा गया एचटीएमएल दिखाई देता है? या एक विधि जिसे मैं पहले प्रस्तुत करने के लिए मजबूर करने के लिए बुला सकता हूं? किसी भी सुझाव का स्वागत होगा।

नोट: मुझे तब से एहसास हुआ है कि समस्या पूरी तरह से मेरी गलती थी, ब्राउज़र या jQuery की नहीं। कृपया नीचे मेरा जवाब देखें।

+0

कुछ कोड मददगार होगा के लिए हटा दिया गया है के बाद से jQuery 1.7+ तो यह प्रयास करें,

$(document).on("click","#Cancel" , function(){ //do something }); 

जाएँ http://api.jquery.com/on/। –

+0

क्या आप अधिक विशिष्ट समाधान देने में मदद के लिए कुछ समस्याग्रस्त कोड जोड़ सकते हैं? – deceze

उत्तर

1

मुझे अंततः समस्या को हल करने के लिए सेटटाइमआउट() का उपयोग कर मेरे कोड को देरी करने के लिए नए तत्वों को प्रस्तुत किए जाने तक समस्या मिली। हालांकि एक आदर्श समाधान नहीं है, क्योंकि मैंने जो टाइमआउट अवधि चुना है वह काफी मनमानी है।

मुझे इसके नीचे जाना है। जिस फ़ंक्शन को मैं कॉल कर रहा था वह जोड़ा गया था कि HTML कॉलबैक के माध्यम से इसे असीमित रूप से कर रहा था। तो जब मैं नए एचटीएमएल तत्वों को खोजने की कोशिश कर रहा था, तो वे वास्तव में अभी तक नहीं थे। मैंने अब अपना कोड बदल दिया है ताकि कॉलबैक नए जोड़े गए तत्वों को संसाधित करने के लिए भी ज़िम्मेदार है, इसलिए यह गारंटी है कि वे उपस्थित होंगे।

10

आप .live() for this, रिग आपके क्लिक हैंडलर यह करने के बजाय सिर्फ .click() का इस तरह उपयोग कर सकते हैं:

$(document).ready(function() { 
    //instead of $(".myTreeNode").click(.... 
    $(".myTreeNode").live('click', function() { 
    //Do stuff 
    }); 
}); 

एक .click(), तत्वों यह पाता है जब यह मार डाला है करने के लिए ईवेंट हैंडलर्स बांधता है तो नए तत्व डॉन ' हैंडलर नहीं है। .live() बदले में क्लिक करने के लिए डीओएम स्तर पर सुनता है, इसलिए इससे कोई फर्क नहीं पड़ता कि वे अब या बाद में जोड़े गए हैं या नहीं। बहुत से तत्वों के मामले में, आपके पास कुछ तत्वों के बाद प्रत्येक तत्व के लिए ईवेंट हैंडलर भी होता है, यह भी अधिक कुशल हो जाता है।

+0

मैंने कोशिश की, लेकिन यह ठीक नहीं हुआ। समस्या यह है कि नए जोड़े गए HTML को jQuery खोजों तक पहुंचने तक प्रतीत नहीं होता है जब तक कि इसे प्रस्तुत नहीं किया जाता है, और यह अभी भी भविष्य में है। –

+0

@ चार्ल्स - क्या आप एक क्लिक ईवेंट बाध्य करने के अलावा कुछ कर रहे हैं? यदि आप इसे अधिक स्थानीय चाहते हैं तो क्लिक को 'लाइव() 'या' .delegate() 'द्वारा संभाला जाना चाहिए। –

2

"लाइव" आपको मदद करने के लिए अधिक जानकारी

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