2010-11-24 8 views
6

मैं एक div इस तरहजावास्क्रिप्ट setTimeout या jQuery देरी - न मेरे लिए काम कर रहे हैं

<div id="sale"> 
    ........ 
</div> 

है और मैं दोनों

$('#sale').delay(3000).slideDown(500); 

और

setTimeout(sale(), 3000); 

function sale() { 
    $('#sale').slideDown(500); 
} 

का उपयोग करने की कोशिश की लेकिन न तो उनमें से काम कर रहे हैं। JQuery देरी का कहना है कि $('#sale').delay() कोई फ़ंक्शन नहीं है जबकि setTimeout तरीका बेकार setTimeout कॉल (गायब उद्धरण) कहता है। अगर मैं sale() कॉल के चारों ओर डबल कोट्स जोड़ता हूं, तो यह कहता है कि "बिक्री परिभाषित नहीं है"।

इन कामों में से कोई भी क्यों नहीं होगा?

मैं बस इतना करने की कोशिश कर रहा हूं कि पेज लोड होने के 3 सेकंड बाद एक div प्रकट हो।

+0

'सेटटाइमआउट (बिक्री, 3000); ', नहीं' सेटटाइमआउट (बिक्री(), 3000);' – Reigel

+2

'.delay()' विधि 'jQuery 1.4' में जोड़ा गया था। आप कौन सा संस्करण उपयोग कर रहे हैं? – user113716

उत्तर

15

setTimeout के मामले में आप बस इसे गलत कर रहे हैं।

setTimeout(sale(), 3000); // will call sale and use the RETURN value in the callback but sale returns undefined 

आप एक समारोह में पारित करने के लिए की जरूरत है:

function sale() { 
    $('#sale').slideDown(500); 
} 

setTimeout(sale, 3000); // just pass in the reference to sale() 

अन्य संभावना:

// no difference in this case 
// Note: if it were obj.sale() then you would need to do this version 
//  otherwise sale() will get called with the this set to window 
setTimeout(function(){sale()}, 3000) 

और अंत में कम से कम:

setTimeout(function() { $('#sale').slideDown(500); }, 3000); 
+0

अतिरिक्त फ़ंक्शन में कोई बात नहीं है। –

+0

@ मैथ्यू मुझे पता है, इसे ठीक किया गया है, बस आदत है क्योंकि जब मैं सेटटाइमआउट का उपयोग करता हूं तो मैं हमेशा उस आवश्यकता की आवश्यकता को समाप्त करता हूं;) –

+0

वैकल्पिक रूप से आप एनीमेशन को अज्ञात फ़ंक्शन –

6

आपको काम करने के लिए delay() के लिए कतार में होना आवश्यक है।

$('#sale').queue(function() { 

    $(this).delay(3000).slideDown(500).dequeue(); 

}); 

See it.

Patrick Dw टिप्पणियां आप एक queue() में होना है, तो अपने अगले विधि श्रृंखला एक एनीमेशन है की जरूरत नहीं है में सूचित किया है। उसका JSFiddle देखें।

+0

देरी() एनीमेशन श्रृंखला का * पहला * तत्व नहीं हो सकता है? – AndreKR

+0

@AndreKR - हाँ यह कर सकता है। यह जवाब गलत है। http://jsfiddle.net/patrick_dw/Uts7t/ – user113716

+0

@patrick dw मैं * शपथ ग्रहण कर सकता था * मैंने हाल ही में पढ़ा है कि आपको काम करने के लिए 'देरी()' के लिए 'कतार() 'में होना चाहिए ... ओह ठीक है। क्या यह हाल ही में एक jQuery विकास है? – alex

0
setTimeout(sale, 3000); 

से पहले, आप setTimeoutsale से वापसी मान गुजर रहे थे। यह वास्तविक कार्य पास करता है।

0

आपके पहले समाधान में ऐसा लगता है कि jQuery भी लोड नहीं हुआ है।

दूसरा कोड आप setTimeout(sale, 3000); करने के लिए (कोष्ठकों को छोड़), क्योंकि उन लोगों के साथ आप वापसी sale() की, जो undefined है साथ setTimeout बुला रहे हैं है में।

+0

नहीं, यह 'अपरिभाषित ' –

+0

अरग है, मुझे यकीन नहीं था ... 50/50 मौका खो गया। ;) – AndreKR

+0

jquery लोड हो गया है। मैंने अभी उस भाग को पोस्ट नहीं किया – Catfish

0
setTimeout("sale();", 3000); 
+1

के अंदर डाल सकते हैं बुरा विचार - यह आंतरिक रूप से 'eval() 'प्रकार का कार्य। तर्क के रूप में बस 'बिक्री' पास करें। – alex

+0

इसके साथ एक और संभावित मुद्दा यह है कि '.ready() 'हैंडलर के भीतर कार्यों को परिभाषित करना असामान्य नहीं है। यदि ऐसा है, तो 'बिक्री'' सेटटाइमआउट 'के लिए पहुंच योग्य नहीं होगा जो वैश्विक संदर्भ में स्ट्रिंग का मूल्यांकन करने का प्रयास करता है। – user113716

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