2010-04-05 12 views
25

मेरे पास एक छोटा jquery स्निपेट है जो किसी पृष्ठ पर उपयोगकर्ता क्रियाओं के जवाब में स्क्रीन के शीर्ष पर अधिसूचना संदेश प्रदर्शित करता है। अधिसूचना अक्सर अजाक्स कार्यों के अंदर गतिशील सामग्री के साथ प्रदर्शित होती है।Jquery TimeOut फ़ंक्शन को कैसे रोक/ओवरराइड करें?

उदाहरण के लिए:

$("#mini-txt").html("Thank you!"); 
$("#mini").fadeIn("fast"); 
setTimeout(function() {$("#mini").animate({height: "hide", opacity: "hide"}, "medium");}, 3000); 

अधिसूचना में अच्छी तरह से काम करता है, जब कोई उपयोगकर्ता तेजी से उत्तराधिकार में दो या अधिक कार्यों, जिस स्थिति में समय समाप्ति समारोह अपने आप में और दूसरा संदेश को भ्रमित करेंगे करता है को छोड़कर अंदर आने के लिए प्रकट होता है पिछले 3000 मिलीसेकंड।

यदि कोई नई कार्रवाई की जाती है तो पिछली अधिसूचना को "मारने" का कोई तरीका है। मुझे कार्यों/चयनकर्ताओं के साथ कोई समस्या नहीं है, बस टाइमऑट फ़ंक्शन .... या तो इसे रोकना या इसे किसी भी तरह ओवरराइड करना। या शायद संदेश गायब होने से पहले कुछ सेकंड के लिए स्क्रीन पर रिंगर करने के लिए एक बेहतर विकल्प है?

धन्यवाद।

उत्तर

56

सबसे पहले, आप setTimeout समारोह के लिए वापसी मान की दुकान setTimeout पर कॉल करें।

// Then clearn the timeout 
clearTimeout(timeout); 
+0

क्या यह समाशोधन के बाद टाइमआउट फ़ंक्शन निष्पादित करेगा? – sbs

6

आप उपयोग कर सकते हैं .stop()

रोक वर्तमान में चलने वाली एनीमेशन मिलान किया तत्वों पर। , तब

// Set the timeout 
var timeout = setTimeout(function() 
    { 
     // Your function here 
    }, 2000); 

जब आप टाइमआउट को मारने के लिए तैयार हैं ... तुम सिर्फ पिछले से संग्रहीत मूल्य के साथ clearTimeout फोन:

6

jQuery 1.4 एक विधि में बनाया गया है एनिमेशन के लिए देरी को संभालने के लिए आप कुछ इस तरह कर सकते हैं: बाद में

$("#mini-txt").html("Thank you!"); 
$("#mini").fadeIn("fast").delay(3000).animate({height: "hide", opacity: "hide"}, "medium"); 

और फिर जब आप एनीमेशन कतार आप कर सकते हैं साफ करने के लिए करना चाहते हैं:

$("#mini").stop(true); 
0

इस देरी के साथ समारोह चलाने के बाद समय समाप्त साफ हो जाएगा 500ms

var timeout = setTimeout(function(){ 

/* YOUR FUNCTION */ 

}, 500, function(){ 
    clearTimeout(timeout); 
}); 
संबंधित मुद्दे