Остановить / запустить функцию, отвечающую сама - PullRequest
1 голос
/ 14 февраля 2011

У меня есть этот код:

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

Ну, я хочу сделать это, если пользователь нажимает кнопку, чтобы функция перестала отвечать сама ... Так что код становится

function functionName(){
    // blablabla
    // dosomething

}

и когда он снова нажимает кнопку, чтобы она снова началась ...

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

Как я могу это сделать (с помощью jquery)?

Привет

Ответы [ 4 ]

3 голосов
/ 14 февраля 2011

setTimeout возвращает идентификатор доступа. Этот идентификатор может использоваться для вызова clearTimeout(), который останавливает текущее время ожидания и, следовательно, завершает ваш «функциональный цикл»;

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

    // do something

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

this будет ссылаться на объект window, называемый так. Возможно, лучше использовать собственное пространство имен для хранения идентификатора.

2 голосов
/ 14 февраля 2011

Это довольно просто, вы можете использовать toggle () из JQuery и передать его двумя методами. Один запускает функцию, а другой останавливает тайм-аут.

var timeoutId;

function functionName(){
    // blablabla
    // dosomething

    timeoutId = setTimeout(functionName, 2000);
}


$(document).ready(function(){   
    $('#myButton').toggle( function() {
        functionName();
    }, function() {
        clearTimeout(timeoutId);
    });
});
0 голосов
/ 14 февраля 2011

Вот один способ настроить функцию переключения, чтобы чередовать действие 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/

0 голосов
/ 14 февраля 2011

Для остановки таймера вы можете использовать clearTimeout.

var timerId = setTimeout(functionName, 5000);

clearTimeout(timerId);

Что касается логики запуска функции, вы можете просто проверить, какая кнопка была нажата.

Я не был на 100% уверен в том, что вы искали, поэтому это по крайней мере ответит на ваш вопрос о том, как остановить таймер.

...