2012-10-21 12 views
12
var counter = 0; 
jQuery("#div1, #div2").fadeIn('300',function(){ 
{ 
    counter++; 
    console.log(counter); 
} 

ऊपर दिया गया कोड "1" और "2" प्रिंट करेगा क्योंकि jQuery फीडइन दो अलग-अलग डॉम ऑब्जेक्ट्स पर निहित है। क्या इस कोड को तोड़ने के बिना इसे केवल एक बार चलाने के लिए वैसे भी है?jQuery फीडइन अपने कॉलबैक में दो बार चलाता है

+0

क्या आप प्रति तत्व एक काउंटर रखना चाहते हैं? तुम क्या करने की कोशिश कर रहे हो ? –

+0

@dystroy, मुझे कॉलबैक फ़ंक्शन में केवल एक बार कुछ सामान करने की आवश्यकता है – Alon

उत्तर

4

यह एक त्वरित समाधान नहीं बल्कि सबसे अच्छा

var myFlag = true; 
jQuery("#div1, #div2").fadeIn('300',function(){ 
{ 
    if(myFlag == true) 
    { 
     // write the code here 
     myFlag = false; 
    } 
} 

आशा इस मदद करता है ... मुहम्मद है।

+0

यह समाधान मेरे लिए सबसे अच्छा एक के बाद से मैं उपयोग कर रहा हूँ हो सकता है jQuery v1.4.2 और इसे अद्यतन नहीं कर सकता – Alon

4

आप इसे दो बार चलाने के लिए स्पष्ट रूप से कह रहे हैं क्योंकि आपने दो वस्तुओं के चयनकर्ता को परिभाषित किया है। आप इसे एक बार चलाने के लिए चाहते हैं, एक आइटम पर चलने के लिए पूछना:

jQuery("#div1") 
+0

धन्यवाद फ्लेम यह सही उत्तर है, इस प्रश्न के लिए: बस उन्हें दो वाक्यों में विभाजित करें: jQuery ("# ​​div1")। FadeIn ('300'); । jQuery ("# DIV2") fadein ('300', function() {{ काउंटर ++; console.log (काउंटर); }) – Anas

17

एक सरल समाधान:

$("#div1").fadeIn(300); 
$("#div2").fadeIn(300,function(){ 
    // do something only once 
}); 

साफ समाधान है उपयोग करने के लिए jQuery's promise system:

$.when($("#div1, #div2").fadeIn('300')).done(function(){ 
    // do something only once 
}); 

demonstration

+0

काम नहीं करता है जब jQueery v1.4.2 स्थापित है। – Alon

+0

अद्यतन jQuery। अब हम संस्करण 1.8 पर हैं। –

+0

अगर मैं अपडेट कर सकता तो मैं इसे कर सकता था :) – Alon

2

अपने कोड क्रमबद्ध के संदर्भ में:

jQuery("#div1, #div2").fadeIn('300',function(){ 
    counter++; 
    console.log(counteR); 
}); 

jQuery("#div1, #div2").each(function(){ 
    jQuery(this).fadeIn('300',function(){ 
     counter++; 
     console.log(counteR); 
    }); 
}) 

अतः अपने कॉलबैक jQuery 1.6 में

2

उपयोग नई .promise() प्रत्येक तत्व के लिए सक्रिय कर देगा, इसे हल करने कि कई कॉलबैक समस्या है, तो की तरह उपयोग किया गया था के रूप में ही है:

var counter = 0; 
jQuery("#div1, #div2").fadeIn('300').promise().done(function() 
{ 
    counter++; 
    console.log(counter); 
}); 
संबंधित मुद्दे