2012-08-22 10 views
68

तो अभी मैं समझता हूं कि एक ईवेंट श्रोता को गतिशील रूप से जोड़े गए तत्व में संलग्न करने के लिए, आपको तत्व जोड़ने के बाद श्रोता को फिर से परिभाषित करना होगा। क्या इसे बाईपास करने का कोई तरीका है, इसलिए आपको कोड के पूरे अतिरिक्त ब्लॉक को निष्पादित करने की आवश्यकता नहीं है?Jquery गतिशील रूप से जोड़े गए तत्वों के लिए ईवेंट श्रोताओं को जोड़ना

+0

एक वैनिला js समाधान: http://stackoverflow.com/a/27373951/1385441 –

उत्तर

127

.on() का उपयोग करके आप एक बार अपने कार्य को परिभाषित कर सकते हैं, और यह किसी भी गतिशील रूप से जोड़े गए तत्वों के लिए निष्पादित होगा।

उदाहरण के लिए

$('#staticDiv').on('click', 'yourSelector', function() { 
    //do something 
}); 
+0

क्या उन घटनाओं पर .on() का उपयोग करने का कोई तरीका है जो इन नहीं हैं देशी jquery। यानी मुझे इसे एक jquery प्लगइन के साथ उपयोग करने की आवश्यकता है। – Wiz

+0

@Wiz: आप किसी भी घटना – zerkms

+0

@zerkms से बाध्य कर सकते हैं ठीक है, मैं इसे होवरकार्ड और $ ('क्लास') के साथ उपयोग करने की कोशिश कर रहा हूं। ('होवरकार्ड', फ़ंक्शन() {}); काम नहीं कर रहा है, जब सामान्य वाक्यविन्यास $ ('वर्ग') है। होवरकार्ड (फ़ंक्शन() {}); – Wiz

38
$(document).on('click', 'selector', handler); 

कहाँ click एक घटना नाम है, और handler, एक ईवेंट हैंडलर है एक समारोह के संदर्भ में या अनाम समारोह function() {}

पी एस की तरह: आप विशेष नोड आप के लिए गतिशील तत्व जोड़ रहे हैं पता है - आप इसे document के बजाय निर्दिष्ट कर सकते हैं।

+6

'$ (दस्तावेज़)' का प्रयोग न करें। घटना निकटतम स्थिर माता-पिता से बंधी जानी चाहिए। –

+3

@ जोसेफ सिलबर: मैंने इसके लिए पीएस जोड़ा है। और "उपयोग न करें" बहुत अधिक स्पष्ट है। इसका उपयोग करने के लिए वैध मामले हैं (यह भी जिक्र दस्तावेज में निर्दिष्ट नहीं है: http://api.jquery.com/live/) – zerkms

1

जब jQuery प्लगइन कॉल के साथ नए तत्व जोड़ है, तो आप निम्नलिखित की तरह कर सकते हैं:

$('<div>...</div>').hoverCard(function(){...}).appendTo(...) 
2

आप गतिशील रूप से उन तत्वों इसलिए किसी भी श्रोता अभ्यस्त पृष्ठ लोड पर लागू किया पैदा कर रहे हैं उपलब्ध रहना। मैंने आपके समाधान को सही समाधान के साथ संपादित किया है। असल में jQuery में पैरेंट एलिमेंट को अटैचमेंट करके इसे बाध्यकारी करने के लिए ईवेंट होता है और इसे सही गतिशील रूप से बनाए गए तत्व के नीचे नीचे प्रसारित करता है।

$('#musics').on('change', '#want',function(e) { 
    $(this).closest('.from-group').val(($('#want').is(':checked')) ? "yes" : "no"); 
    var ans=$(this).val(); 
    console.log(($('#want').is(':checked'))); 
}); 

http://jsfiddle.net/swoogie/1rkhn7ek/39/

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