停止/启动一个回复自己的函数

时间:2011-02-14 17:40:01

标签: javascript jquery settimeout

我有这段代码:

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

如果用户按下按钮,该功能停止回复,我想做到这一点...... 这样代码就变成了

function functionName(){
    // blablabla
    // dosomething

}

当他再次按下按钮时再次启动......

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

我怎么能这样做(用jquery)?

问候

4 个答案:

答案 0 :(得分:3)

setTimeout返回访问ID。该id可用于调用clearTimeout()来停止当前超时,从而结束您的“功能循环”;

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

    // do something

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

this会引用这样调用的window对象。可能更好的想法是使用您自己的命名空间来存储id。

答案 1 :(得分:2)

非常简单,你可以使用来自JQuery的toggle()并传递两种方法。一个启动该功能,另一个停止超时。

var timeoutId;

function functionName(){
    // blablabla
    // dosomething

    timeoutId = setTimeout(functionName, 2000);
}


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

答案 2 :(得分:0)

要停止计时器,您可以使用clearTimeout

var timerId = setTimeout(functionName, 5000);

clearTimeout(timerId);

至于运行函数的逻辑,您只需检查点击了哪个按钮。

我并不是100%清楚你在寻找什么,所以这至少会回答你关于如何停止计时器的问题。

答案 3 :(得分:0)

这是设置切换功能以将setTimeout操作从on切换为off的一种方法:

(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/