2012-11-16 22 views
92

के लिए ट्रिगर नहीं कर रहा समस्या यह है कि मेरे पास इनपुट टैग के कुछ गतिशील रूप से बनाए गए सेट हैं और मेरे पास एक ऐसा फ़ंक्शन भी है जो किसी भी समय इनपुट को ट्रिगर करने के लिए है मूल्य बदल जाता है।jQuery .on ('परिवर्तन', फ़ंक्शन() {} गतिशील रूप से बनाए गए इनपुट

$('input').on('change', function() { 
    // Does some stuff and logs the event to the console 
}); 

हालांकि .on('change') किसी भी डायनामिक रूप से तैयार आदानों के लिए ट्रिगर नहीं कर रहा है, केवल आइटम है कि वर्तमान पृष्ठ लोड किया गया था के लिए। दुर्भाग्य से इस मुझे एक बाँध के एक बिट में छोड़ देता है के रूप में .on करने के लिए है .live() और .delegate() के लिए प्रतिस्थापन हो, जिनमें से सभी .bind() के लिए रैपर हैं:/

क्या किसी और को यह समस्या है या समाधान के बारे में पता है?

उत्तर

182

आप on कार्य करने के लिए एक चयनकर्ता प्रदान करना चाहिए:

$(document).on('change', 'input', function() { 
    // Does some stuff and logs the event to the console 
}); 

उस मामले में, यह के रूप में आप की उम्मीद काम करेंगे। साथ ही, दस्तावेज़ के बजाय कुछ तत्व निर्दिष्ट करना बेहतर है।

बेहतर समझ के लिए यह लेख पढ़ें: http://elijahmanor.com/differences-between-jquery-bind-vs-live-vs-delegate-vs-on/

+0

कि यह तय हो गई है, धन्यवाद! – Nick

+1

आप कमाल हैं! मुझे यह समस्या भी थी। कभी नहीं सोचा कि आप चयनकर्ता को दूसरे पैरामीटर के रूप में जोड़ सकते हैं। – Tomatrox

+1

हाँ, जैसा कि पूरे दस्तावेज़ के बजाय कुछ तत्वों को संकीर्ण करने के लिए अच्छा है, यदि मामले में कुछ div के बाद गतिशील भाग इसका उपयोग करता है, उदाहरण के लिए: $ ('# ajax_table')। ('Change', ' इनपुट ', फ़ंक्शन() {... –

3
$("#id").change(function(){ 
    //does some stuff; 
}); 
+9

हम्म ... कैसे थोड़ा सा स्निपेट का स्पष्टीकरण? – kleopatra

+9

यह अभी भी गतिशील रूप से बनाए गए तत्वों के साथ काम नहीं करेगा, क्योंकि यह दस्तावेज़ लोड पर बाध्य करने का प्रयास करता है। हालांकि @ArtemVyshniakov द्वारा उत्तर दस्तावेज़ में बाध्य होता है, और जब तत्वों में से किसी एक में परिवर्तन होता है तो इसे निकाल दिया जाता है, दूसरे तर्क के कारण यह आवश्यक तत्व को लक्षित कर सकता है। (जिसका अर्थ है कि जब फ़ंक्शन आग लगती है, तो यह जांच करेगा कि ट्रिगर का स्रोत दूसरे पैरामीटर से मेल खाता है) – FullyHumanProgrammer

+0

Th जोड़ें तैयार समारोह में कोड है। यह काम करेगा – 4302836

10

उपयोग इस

$('body').on('change', '#id', function() { 
    // Action goes here. 
}); 
+3

jquery में '#id' को लपेटने की कोई आवश्यकता नहीं है .. – enrey

+0

FYI, @enrey '# id'' के बजाय कोड में' $ ('# id') 'का जिक्र कर रहा था – Loaf

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