2009-06-02 18 views
8

मेरे पास एक jquery फ़ंक्शन है जो क्लिक करते समय एक div को दृश्यमान बनाने पर सेट टाइमआउट उत्पन्न करता है।अपने सेट समय से पहले एक सेटटाइमआउट फ़ंक्शन समाप्त करें

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

मेरे वर्तमान कोड है:

$(document).ready(function(){ 

$('li#contact').click(function() { 
     $('ul.image_display').css('display', 'none'); 
     $('ul.projects').fadeOut().hide(); 
     $('li#cv').removeClass('cur'); 
     $('li#projects').removeClass('cur'); 
     $('li#contact').addClass('cur'); 
     $('ul.contact').fadeIn(function() 
         { 
         setTimeout(function() 
         { 
         $('ul.contact').fadeOut('slow'); 
         }, 8000); 
         }); 
     setTimeout(function() { 
      $('li#contact').removeClass('cur'); 
      $('li#cv').addClass('cur'); 
      $('ul.projects').fadeIn('slow'); 
      $('ul.image_display').css('display', 'block'); 
      }, 8625); 

}); 

}); 

थोड़ा बोझिल लेकिन काम करता है जब तक यह क्लिक किया जाता है:

$(document).ready(function(){ 

$('#projects').click(function() { 
     $('li#cv').removeClass('cur'); 
     $('ul.contact').fadeOut().hide(); 
     $('#contact').removeClass('cur'); 
     $('ul.projects').fadeIn('slow'); 
     $('#projects').addClass('cur'); 
     $('ul.image_display').css('display', 'block'); 
}); 

}); 

अगर दूसरी बस के बाद प्रथम श्रेणी 'CUR' की तुलना में अभी भी ऊपर आता क्लिक किया जाता है सेट समय के बाद ली # सीवी पर।

क्या यह समझ में आता है !!!! ????

आशा है कि!

+0

मुझे पता है कि कोड गधे को बेकार करता है लेकिन मैं अभी भी इस पूरी jquery malarkey के लिए नया हूँ! – DanC

+0

जिस तरह से सेटटाइमआउट एक जावास्क्रिप्ट फ़ंक्शन है जो jQuery (आपके शीर्षक के संबंध में) के साथ कुछ भी नहीं करता है :) –

+0

शायद मुझे इसके बारे में jquery दस्तावेज़ों में कुछ भी क्यों नहीं मिला! चीयर्स दोस्त – DanC

उत्तर

18

setTimeout फ़ंक्शन उस टाइमआउट के लिए पहचानकर्ता लौटाता है। फिर आप clearTimeout फ़ंक्शन के साथ उस टाइमआउट को रद्द कर सकते हैं। आप इस तरह से कुछ कर सकते हैं तो (अपने कोड के साथ रिक्त स्थान को भरने):

var timer; 
$(function() { 
    $(...).click(function() { 
     ... 
     timer = setTimeout(...); 
     ... 
    }); 

    $(...).click(function() { 
     clearTimeout(timer); 
    }); 
}); 

यह इस के लिए एक वैश्विक चर रखने के लिए विशेष रूप से सुपर साफ नहीं है लेकिन,। आप टाइमर को data में जो भी तत्व अपनी स्थिति के लिए सबसे अधिक समझ में डाल सकते हैं, में विशेषता रख सकते हैं। कुछ इस तरह:

$(function() { 
    $(...).click(function() { 
     ... 
     var timer = setTimeout(...); 
     $(someelement).data('activetimer', timer); 
     ... 
    }); 

    $(...).click(function() { 
     var timer = $(someelement).data('activetimer'); 
     if(timer) { 
      clearTimeout(timer); 
      $(someelement).removeData('activetimer'); 
     } 
    }); 
}); 

यह वास्तव में नहीं क्लीनर दिखता है, लेकिन यह घड़ी स्टोर करने के लिए एक वैकल्पिक तरीका है ...

+0

क्षमा करें, क्या आप मेरे लिए थोड़ा सा विस्तार कर सकते हैं? यह कोड में कहां जाएगा? – DanC

+1

जब आप टाइमआउट सेट करते हैं, तो सेटटाइमआउट के वापसी मान को एक चर में सहेजें - उदाहरण में, "टाइमर"। जब आप इसे समाप्त करना चाहते हैं, तो आप "टाइमर" पर clearTimeout() को कॉल कर सकते हैं, जो केवल आने वाली घटना को रद्द कर देगा। यह टाइमआउट घटना समय से पहले नहीं होगा, यह सिर्फ इसे कभी नहीं करेगा, इसलिए आपको टाइमआउट में कोड के लिए अन्यथा निष्पादित करने के लिए भी एक तरीका प्रोग्राम करना होगा। – Hober

+0

बहुत बढ़िया! यह बहुत अच्छा काम करता है! मदद के लिए चीयर्स! – DanC

3

आप clearTimeout() उपयोग कर सकते हैं कि क्या करना है। clearTimeout() पर जाने के लिए आपको एक चर में setTimeout() से वापसी मान रखना होगा।

+0

शांत, मदद साथी के लिए चीयर्स! – DanC

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