2011-02-14 116 views
1

我有這樣的代碼:停止/啓動功能答覆本身

function functionName(){ 
    // blablabla 
    // dosomething 
    setTimeout(functionName, 5000); 
} 

嗯,我希望把它當用戶按下一個按鈕,功能停止答覆本身...... 使代碼變得

function functionName(){ 
    // blablabla 
    // dosomething 

} 

,當他再次按下一個按鈕,它再次開始......

function functionName(){ 
    // blablabla 
    // dosomething 
    setTimeout(functionName, 5000); 
} 

如何ID那(與jQuery)?

問候

回答

2

它非常簡單,你可以使用jQuery的toggle()並傳遞給它兩個方法。一個啓動該功能,另一個停止超時。

var timeoutId; 

function functionName(){ 
    // blablabla 
    // dosomething 

    timeoutId = setTimeout(functionName, 2000); 
} 


$(document).ready(function(){ 
    $('#myButton').toggle(function() { 
     functionName(); 
    }, function() { 
     clearTimeout(timeoutId); 
    }); 
}); 
0

要停止,您可以使用clearTimeout定時器。

var timerId = setTimeout(functionName, 5000); 

clearTimeout(timerId); 

至於運行功能的邏輯,你可以檢查看看哪個按鈕被點擊。

我並不是100%清楚你正在尋找什麼,所以這至少會回答你如何停止計時器的問題。

+0

但我怎麼能在使用clearTimeout我當前腳本? – Thew 2011-02-14 17:51:50

3

setTimeout返回訪問標識。該ID可用於呼叫clearTimeout(),該功能可停止當前的超時並因此結束您的「功能循環」;

function functionName() { 
    if(this.tID) { 
     clearInterval(tID); 
     delete this.tID; 
    } 

    // do something 

    this.tID = setTimeout(functionName, 5000); 
} 

this將參照所謂的就像這樣的window對象。使用自己的名稱空間來存儲ID可能是一個更好的主意。

0

這裏的設置切換功能,以交替的setTimeout動作從開到關的一種方法:

(function toggler() { // don't pollute the global scope 

    var temp; 
    var running = false; 
    var myfunc = function() { 
    do_your_stuff_here(); // a pulsing red box in the Fiddle example 
    running = true; 
    temp = setTimeout(myfunc, 1000); 
    } 

    $('#toggle').click(function(e) { // toggler control is a link 
    e.preventDefault(); 
    if (running) { 
     clearTimeout(temp); // turn it off 
     running = false; 
    } else { 
     myfunc(); // or turn it on 
    } 
    }); 

    myfunc(); // kickstart it 

})(); 

這裏的工作小提琴:http://jsfiddle.net/redler/XKTW9/