2012-02-21 88 views
1
var myTimer = setInterval(function(){ 
    var eleID = ''; 
    var delayTimer = ''; 
    $('#hp-fcas li').each(function(i) { 
     eleID = $(this).attr('id'); 
     delayedTrigger($('#'+eleID + ' a'), 7000*i); 
    }); 
    function delayedTrigger(elem, delay){ 
     setTimeout(function(){ 
      $(elem).trigger('click'); 
     }, delay); 
    } 
}, 21000); 

$(".play").click(function(){ 
    clearTimeout(); 
    clearInterval(myTimer); 
}); 

第一個間隔是21秒,是第一個實例。setInterval和setTimeout

第二個區間是3個7秒的實例(我想要的)。

我試圖清除所有上述,當我點擊.play。

任何幫助?

+2

你能描述你遇到的問題嗎? – 2012-02-21 21:39:49

+0

當您點擊播放時間隔是否成功清除?或者兩者都繼續? – 2012-02-21 21:40:34

+0

Rocky修正了第二個問題(清除超時),不敢相信我沒有想到這一點。 第一個問題是第一個循環是21秒的第一個觸發器 – ilango 2012-02-22 15:42:59

回答

4

clearTimeout需要傳遞一個超時ID,這個ID由setTimeout返回。

clearTimeout();什麼都不做。您可以將返回值從setTimeout推送到數組中,然後遍歷它們並運行clearTimeout

var timeouts = []; // Array of timeouts 
var myTimer = setInterval(function(){ 
    var eleID = ''; 
    var delayTimer = ''; 
    $('#hp-fcas li').each(function(i) { 
     eleID = $(this).attr('id'); 
     delayedTrigger($('#'+eleID + ' a'), 7000*i); 
    }); 
    function delayedTrigger(elem, delay){ 
     timeouts.push(setTimeout(function(){ // push onto array 
      $(elem).trigger('click'); 
     }, delay)); 
    } 
}, 21000); 

$(".play").click(function(){ 
    $.each(timeouts, function(i,v){ // clear all timeouts 
     clearTimeout(v); 
    }); 
    clearInterval(myTimer); 
}); 
+0

感謝火箭隊,這個作品! – ilango 2012-02-22 15:44:26

+0

@ilango:不客氣,很高興我可以幫忙:-) – 2012-02-22 16:05:29

+0

@ilango:如果它適合你,請把它標記爲公認的答案 – Crimbo 2017-10-19 12:34:55