2009-05-26 24 views
17

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

यहां मैं जो आया हूं, वह सभी divs को बाहर निकाल देता है और अंतिम कॉलबैक निकाल दिया जाता है जब एक चेतावनी() प्रदर्शित करता है।

$("div").fadeOut(1000, function() 
{ 
    if ($("div").index($(this)) == $("div").length-1) 
      alert("this is the final callback"); 
}); 

क्या यह जांचने का एक आसान तरीका है कि कौन सा कॉलबैक आखिरी है या क्या यह ऐसा करने का एकमात्र तरीका है?

उत्तर

17

यह अंतिम तत्व पर fadeOut कहलाता है जब यह चेतावनी उत्पन्न करेगा। यह आखिरी फीका आउट नहीं होगा।

var numDivs = $('div').length; 
$('div').fadeOut(1000, function() { 
    if(--numDivs > 0) return; 
    alert('this is the final fadeout to complete'); 
}); 

JSFiddle

+0

अहह, मैं देख रहा हूं कि आप क्या कह रहे हैं। अच्छा निर्णय! – Gromer

+0

हाँ, अच्छी सोच। मुझे अन्य समाधान भी पसंद हैं लेकिन यह 100% सही है। –

+0

गिनती कहां परिभाषित है? –

1
$("div:not(:last)").fadeOut(1000); 
$("div:last").fadeOut(1000, function() { 
    alert("Hey!"); 
}); 
+0

अच्छा कर सकता हूं, मैंने पहले() पहले उपयोग नहीं किया है। जानकार अच्छा लगा! –

46

पर इसे देखें the jQuery documentation for .promise()

पर एक नज़र लेने की कोशिश यह काम करना चाहिए:

$('div').fadeOut(1000).promise().done(function() { 
    alert('all done'); 
}); 

के रूप में आमतौर पर, इस पर jQuery प्रलेखन वास्तव में अस्पष्ट है। लेकिन मुझे यकीन नहीं है कि मैं

+0

अद्भुत! मैंने इसे आज़माया और यह काम करता है: http://jsfiddle.net/MP26y/ – geon

+1

इस विधि के साथ एकमात्र मुद्दा यह है कि यह तब तक प्रतीक्षा करता है जब तक सभी कॉल समाप्त नहीं हो जाते। इसलिए यदि आपके पास एक बटन है जो उस फ़ंक्शन को सक्रिय करता है और इसे कई बार क्लिक करता है तो यह हर बार एनीमेशन खत्म करने के बाद आग नहीं लगेगा। यह कई बार फीका होगा और उसके बाद सभी वादे कार्यों को बुलाएगा। तो कुछ परिस्थितियों में यह सबसे अच्छा समाधान नहीं है। – Rumpleteaser

+0

आप [jQuery की .finish()] (http://api.jquery.com/?s=finish%28%29) विधि को भी देखना चाहते हैं, जो ऊपर वर्णित एकाधिक क्लिक समस्याओं को कम कर सकता है। – matlembo

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