2013-07-17 3 views
0

У меня есть следующая функция, которая выполняет SetTimeout назад на себя, то есть:Не удалось очистить таймаута

var doIt = function(){ 
$('#comment_report').trigger('apexrefresh'); 
    setTimeout("doIt()", 5000); 
} 

Мой вопрос, я пытаюсь очистить SetTimeout, что зацикливание через каждые 5 секунд, выпуская :

clearTimeout(doIt); 

К сожалению, это не сработало.

Может кто-то PLS помочь, как я хотел бы очистить выше setTimeout.

Спасибо.

+6

6 ответов за 4 минуты ... Как вы знаете, вы должны гугле это ... :-) – Homer6

+0

https://developer.mozilla.org/en-US/docs/Web/API/window.clearTimeout –

ответ

4

Вы не передаете строку clearTimeout(), вы передаете Number, который идентифицирует setTimeout() (который возвращается указанной функцией).

var timeoutId = null; 

var doIt = function() { 
    $('#comment_report').trigger('apexrefresh'); 
    timeoutId = setTimeout(doIt, 5000); 
}; 

clearTimeout(timeoutId); 

В качестве альтернативы, внутри doIt(), проверьте условия и, если оно выполняется, то return только перед вами выпустить еще один вызов setTimeout() (вам не придется следить за ид что путь).

+0

Спасибо. Для записи я на самом деле пробовал это, но, похоже, не работал для меня, но сейчас отлично работает - очевидно, что-то пропустил. Еще раз спасибо. – tonyf

0

Вам необходимо назначить переменную setTimeout, которая содержит id.

Но в вашем коде вы, кажется, назначаете doIt функции, которая ничего не возвращает.

var timer; 

     timer = setTimeout("doIt()", 5000); 

Затем используйте

if(timer) 
     clearTimeout(timer); 
1
var doit = function(){ 

}; 

var my_timeout_name = setTimeout(doit, 5000); 

clearTimeout(my_timeout_name); 
1

setTimeout возвращает вас идентификатор, который вы можете затем перейти к clearTimeout функции.

Кроме того, вместо этого:

setTimeout("doIt()", 5000); 

Вы можете просто передать функцию:

setTimeout(doIt, 5000); 
1
var myTimeout = false; 
var doIt = function(){ 
$('#comment_report').trigger('apexrefresh'); 
myTimeout = setTimeout(doIt, 5000); 
} 

Тогда вы должны использовать

clearTimeout(myTimeout); 
1

Вы делаете это неправильно clearTimeout(timerid) эта функция tak es идентификатор тайм-аута. вы можете добиться этого, как

var mytimerid; 

    var doIt = function() 
    { 
    $('#comment_report').trigger('apexrefresh'); 
    mytimerid = setTimeout("doIt()", 5000); 
    } 

, а затем, когда-либо требуется остановить время ожидания на

clearTimeout(mytimerid); 
Смежные вопросы