сброс setInterval в функции, область видимости глобальная ..? - PullRequest
0 голосов
/ 13 июля 2011

Проблема: Когда я объявляю clearInterval () / setInterval () или clearTimeout () / setTimeout () внутри функции, она ничего не делает.Причина, по которой я должен сбросить настройки, заключается в том, что пользователь может нажать, чтобы сбросить таймер.

Что я пробовал: Я хочу, чтобы функция выполнялась каждые 3 секунды (поэтому яиспользуя setInterval () против setTimeout ()), и сбросьте этот таймер при нажатии.Я пытался использовать setTimeout (), чтобы он имел clearTimeout () и setTimeout () в конце каждого выполнения функции.РЕЗУЛЬТАТ: выполняется один раз.

Приведенный ниже код аналогичен setInterval.РЕЗУЛЬТАТ: Он зацикливается и никогда не сбрасывается.

// Declare variables as global
var varTimerSpeed = 3000;
var varTimerInterval;
varTimerInterval = setInterval("someFunction()", varTimerSpeed);

function someFunction() {
  // Reset timer
  clearInterval(varTimerInterval);
  varTimerInterval = setInterval("someFunction()", varTimerSpeed);
}

// Call the function
$(".class").live("click",function() { someFunction(); });

В некоторых функциях () выполняются другие вещи, которые выполняются должным образом, поэтому я знаю, что обработчик щелчка работает.

Ответы [ 2 ]

5 голосов
/ 13 июля 2011

Если вы хотите, чтобы someFunction запускался с интервалом, но он был очищен и сброшен при нажатии на элемент .class, то не очищайте интервал внутри someFunction.

Просто очистите и перезапустите его в обработчике кликов.

var varTimerSpeed = 3000;
var varTimerInterval = setInterval(someFunction, varTimerSpeed);

function someFunction() {
  console.log( "someFunction" );
}

$(".class").live("click",function() { 
    clearInterval( varTimerInterval );
    varTimerInterval = setInterval(someFunction, varTimerSpeed);
});
0 голосов
/ 13 июля 2011

Этот слегка измененный jsFiddle, кажется, работает нормально: http://jsfiddle.net/jfriend00/GgQBu/.

// Declare variables as global
var varTimerSpeed = 3000;
var varTimerInterval = setInterval(someFunction, varTimerSpeed);

function someFunction() {
    // Reset timer
    $("#output").append("...");
    clearInterval(varTimerInterval);
    varTimerInterval = setInterval(someFunction, varTimerSpeed);
}

// Call the function
$(".class").live("click", someFunction);
...