我有以下函数对自身执行 setTimeout,即:
var doIt = function(){
$('#comment_report').trigger('apexrefresh');
setTimeout("doIt()", 5000);
}
我的问题是,我试图通过发出以下命令来清除每 5 秒循环一次的 setTimeout:
clearTimeout(doIt);
不幸的是,这没有用。
我将如何清除上述 setTimeout?
我有以下函数对自身执行 setTimeout,即:
var doIt = function(){
$('#comment_report').trigger('apexrefresh');
setTimeout("doIt()", 5000);
}
我的问题是,我试图通过发出以下命令来清除每 5 秒循环一次的 setTimeout:
clearTimeout(doIt);
不幸的是,这没有用。
我将如何清除上述 setTimeout?
您没有将字符串传递给clearTimeout()
,而是传递了Number
which 标识setTimeout()
(由所述函数返回)。
var timeoutId = null;
var doIt = function() {
$('#comment_report').trigger('apexrefresh');
timeoutId = setTimeout(doIt, 5000);
};
clearTimeout(timeoutId);
或者,在内部doIt()
,检查条件以及是否满足,然后return
仅在您发出另一个调用之前setTimeout()
(您不必以这种方式跟踪 id)。
var doit = function(){
};
var my_timeout_name = setTimeout( doit, 5000 );
clearTimeout( my_timeout_name );
setTimeout
为您返回一个 id,然后您可以将其传递给clearTimeout
函数。
此外,而不是这个:
setTimeout("doIt()", 5000);
你可以只传递一个函数:
setTimeout(doIt, 5000);
var myTimeout = false;
var doIt = function(){
$('#comment_report').trigger('apexrefresh');
myTimeout = setTimeout(doIt, 5000);
}
那么你应该使用
clearTimeout(myTimeout);
你做错了clearTimeout(timerid)
这个函数需要超时的ID。你可以做到这一点
var mytimerid;
var doIt = function()
{
$('#comment_report').trigger('apexrefresh');
mytimerid = setTimeout("doIt()", 5000);
}
然后在需要时停止超时
clearTimeout(mytimerid);
您需要将一个变量分配给包含id
.
但是在您的代码中,您似乎正在分配doIt
一个不返回任何内容的函数。
var timer;
timer = setTimeout("doIt()", 5000);
然后使用
if(timer)
clearTimeout(timer);