2011-05-28 18 views
7

कोई विचार है कि आप JQuery की स्थगित विधियों का उपयोग ऐसे फ़ंक्शन के साथ कैसे कर सकते हैं जो सभी बदले गए फॉर्मों का पता लगाता है और प्रत्येक को अजाक्स पोस्ट के रूप में सबमिट करता है?JQuery के साथ स्थगित JQuery()

मैं एक ही बात करता है, तो मैं सिर्फ प्रपत्र प्रस्तुतियाँ के एक लोड सूची से काम कर रहा है, लेकिन अगर मैं का उपयोग प्राप्त कर सकते हैं ...

$('form.changed').each(function(){ 
    return $(this).submitWithAjax(); 
}); 

कोड है कि मैं काम कर पाने के लिए कोशिश कर रहा हूँ का विस्तृत संस्करण यहाँ है ... at JS Fiddle

अग्रिम धन्यवाद!

+0

क्या आप अपना प्रश्न स्पष्ट कर सकते हैं? मुझे यकीन नहीं है कि मैं समझता हूं (लेकिन मुझे पूरा यकीन है कि मेरा जवाब आधार से बाहर है ...) – Pointy

उत्तर

17
इसके बजाय ".प्रत्येक()" का

, ".map()" का उपयोग करें:

var deferreds = $('form.changed').map(function(i, elem) { 
    return $(this).submitWithAjax(); 
}); 

$.when.apply(null, deferreds.get()).then(function() { ... }); 

"$ .जब()" बात टाल वस्तुओं का एक समूह ऊपर बंडल और सभी के लिए प्रतीक्षा की सुविधा देता है उनमें से सफल होने के लिए (या किसी भी विफल होने के लिए — वहां अंतर देखें)। यह आम तौर पर तर्कों की मनमाने ढंग से संख्या की अनुमति देता है, लेकिन चूंकि हमारे पास एक सरणी है, मैंने "लागू()" का उपयोग किया था।

ध्यान दें कि मैं केवल हल्के से इस सामग्री का उपयोग किया है, तो दोबारा जांचना :-) संपादित पर फिर से पढ़ने अपने प्रश्न है, मैं तुम्हें गलत समझा हो सकता है भी — लिए jQuery एपीआई डॉक्स पढ़ें।

+0

यह अच्छा लग रहा है। मैं इसे आज़मा दूंगा और रिपोर्ट करूंगा। –

+0

यह पूरी तरह से काम करता है। आपकी सहायता के लिए धन्यवाद. बस यह समझने की कोशिश कर रहा है कि यह अब क्यों काम करता है। –

+1

"डिफरर्ड" सुविधा उन चीजों में से एक है जो बहुत ही सरल है, लेकिन मैं मानता हूं कि पूरी तरह से "प्राप्त" करना वास्तव में कठिन है कि तंत्र कैसे काम करता है :-) – Pointy

0

फॉर्म फ़ील्ड में परिवर्तन ईवेंट को प्रतिनिधि बनाना आपकी समस्या को हल कर सकता है।

$('form').delegate('input[type=text], input[type=radio], select', 'change', 
function(evt){ 
    // your submits here 
    console.log('changed!') 
}); 
+0

आपकी प्रतिक्रिया के लिए धन्यवाद लेकिन फॉर्म पर परिवर्तनों का पता लगाने में समस्या नहीं थी। '$ ("फॉर्म: इनपुट")। लाइव (' बदलें ', फ़ंक्शन() { // यदि कोई फॉर्म इनपुट $ (यह) .closest (' form ') बदलता है। AddClass ("change"); }); ' –

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