2009-11-12 20 views
5

के आदेश के माध्यम से एक समारोह कॉल गुजर मैं इस जावास्क्रिप्ट है:jQuery एक और समारोह और निष्पादन

triggerAnimation(listItem,toggleToggleRadioListItem(listItem)); 


function triggerAnimation(listItem,passThruFunction){ 
    listItem.find(".inlineLoading").show(); 
// pause and then call the toggle function 
    $("body").animate({opacity: 1}, 1000, 
    function(){ 
     alert("a"); 
    passThruFunction; 
    } 
    ); 
} 

function toggleToggleRadioListItem(listItem) { 
    alert("b"); 
}; 

क्या माना जाता है तो होना:

  • triggerAnimation एक वस्तु और एक समारोह गुजर कहा जाता है
  • ट्रिगरएनीमेशन एक डमी एनीमेशन (एक विराम बनाने के लिए) करता है, फिर एक चेतावनी उठाता है और एक कॉलबैक फ़ंक्शन ट्रिगर करता है जो पारित किए गए फ़ंक्शन को निष्पादित करता है।
  • जो कार्य पारित किया गया था उसे चेतावनी उठाना कहा जाता है।

उपर्युक्त के आधार पर, मुझे उम्मीद है कि अलर्ट ए को अलर्ट बी के सामने उपस्थित होने की उम्मीद है लेकिन ऐसा नहीं है। क्या होता है कि (ऐसा लगता है) चेतावनी बी को जल्द ही ट्रिगरएनीमेशन() कहा जाता है। ऐसा क्यों है? मैं उस व्यवहार को कैसे प्राप्त कर सकता हूं?

उत्तर

6

आप फ़ंक्शन में गुजरकर निष्पादन में देरी कर सकते हैं और इसे बाद में कॉल कर सकते हैं।

triggerAnimation(listItem, function() { 
    toggleToggleRadioListItem(listItem) 
}); 


function triggerAnimation(listItem,passThruFunction){ 
    listItem.find(".inlineLoading").show(); 
// pause and then call the toggle function 
    $("body").animate({opacity: 1}, 1000, 
    function(){ 
     alert("a"); 
     passThruFunction(); 
    } 
    ); 
} 

function toggleToggleRadioListItem(listItem) { 
    alert("b"); 
}; 
+0

यह एक अच्छा समाधान है, मैं मानता हूं। – fresskoma

+0

जो बिल्कुल मेरा इरादा था! धन्यवाद! यह पहली कॉल में एक समारोह के रूप में इसे पारित करके मेरे हिस्से पर एक वाक्यविन्यास त्रुटि थी (जैसा कि सीज़र राज्यों के रूप में, ऐसा लगता है कि मैं इसे पास करने के बजाए इसे बुला रहा था) –

1

क्योंकि आप toggleToggleRadioListItem(listItem) पर कॉल करते हैं जब आप triggerAnimation(listItem,toggleToggleRadioListItem(listItem)); पर कॉल करते हैं, तो पहले toggleToggleRadioListItem(listItem) निष्पादित करते हैं।

2

ठीक है, आप फ़ंक्शन संदर्भ और एनीमेशन को ट्रिगर करने के लिए पैरामीटर की एक सरणी पारित कर सकते हैं, जिसे निष्पादन पर थ्रूफंक्शन को पास करने के लिए पास किया जाता है। जावास्क्रिप्ट में, फ़ंक्शन कोड वास्तव में निष्पादित होने से पहले आप किसी फ़ंक्शन पर जो भी पास करेंगे, उसका हमेशा मूल्यांकन किया जाएगा, यही कारण है कि आपको पहले अपना अलर्ट ("बी") क्यों मिलता है। व्यस्त मूल्यांकन [फ़ंक्शन पैरामीटर के] कहा जाता है, बीटीडब्ल्यू।

1

eduffy's जवाब सरल संभव बात यह है कि काम कर सकता है, और एक का इलाज काम करेगा। यदि आप कुछ और कट्टरपंथी चाहते हैं, तो partial application का एक शांत पठन आपको टूलबार में जोड़ने के लिए एक और तकनीक दे सकता है।

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