2013-09-13 3 views
1

Я ожидаю, что на это уже есть миллион ответов & Я не знаю терминологию для формулировки вопроса. Но ...Способ взломать функцию javascript, которая зацикливается

Взгляните на это: http://jsfiddle.net/QD3UK/8/

$('body').on('click', '.testDiv', function(){ 
    console.log($(this)) 
    repeatTest(1) 
}) 

function repeatTest(n){ 
    window.setTimeout(function(){ 
     $('.result').append(n+" hi<br />") 
     repeatTest(n); 
    }, 3000); 
    n++ 
} 

Я хочу, чтобы функция цикла, чтобы начать снова, когда ДИВ testDiv нажата еще раз - так что есть только одна итерация цикла - это не какое число (n) начинается с.

Помогите? Спасибо

+1

Ищите 'clearTimeout'. –

ответ

5

Вы можете clearTimeout аннулировать существующий setTimeout. Так что-то вроде:

var _handle; 

$('body').on('click', '.testDiv', function(){ 
    clearTimeout(_handle); 
    console.log($(this)) 
    repeatTest(1) 
}); 

function repeatTest(n){ 
    _handle = window.setTimeout(function(){ 
     $('.result').append(n+" hi<br />") 
     repeatTest(n); 
    }, 3000); 
    n++; 
} 
+0

Возможно, должно было быть ясно, что я в цикле jQuery AJAX, у которого есть опция тайм-аута. Я предполагаю, что метод clearTimeout не поможет в этом обстоятельстве. Какие-либо предложения? Спасибо – tozjerimiah

+1

@tozjerimiah Вы должны уточнить свой вопрос. – MirroredFate

+1

@tozjerimiah Да, я не совсем уверен, к чему вы клоните. 'clearTimeout' убьет существующий' setTimeout', чтобы он не срабатывал снова. Если вы можете привести пример в своем вопросе, который немного ближе к вашему фактическому сценарию, включая материал AJAX, это может сделать его более ясным. –

Смежные вопросы