2011-02-14 98 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/