我有以下函数,它自己执行setTimeout,即:
var doIt = function(){
$('#comment_report').trigger('apexrefresh');
setTimeout("doIt()", 5000);
}
我的问题是,我试图通过发出以下命令来清除每5秒循环一次的setTimeout:
clearTimeout(doIt);
不幸的是,这不起作用。
我如何清除上面的setTimeout?
答案 0 :(得分:4)
您不会将字符串传递给clearTimeout()
,而是传递标识Number
的{{1}}(由所述函数返回)。
setTimeout()
或者,在var timeoutId = null;
var doIt = function() {
$('#comment_report').trigger('apexrefresh');
timeoutId = setTimeout(doIt, 5000);
};
clearTimeout(timeoutId);
内,检查条件以及是否符合条件,然后doIt()
仅在您再次拨打return
之前调用setTimeout()
(您无需跟踪id那样)。
答案 1 :(得分:1)
var doit = function(){
};
var my_timeout_name = setTimeout( doit, 5000 );
clearTimeout( my_timeout_name );
答案 2 :(得分:1)
setTimeout
会返回一个您可以传递给clearTimeout
函数的ID。
此外,而不是:
setTimeout("doIt()", 5000);
你可以传递一个功能:
setTimeout(doIt, 5000);
答案 3 :(得分:1)
var myTimeout = false;
var doIt = function(){
$('#comment_report').trigger('apexrefresh');
myTimeout = setTimeout(doIt, 5000);
}
然后你应该使用
clearTimeout(myTimeout);
答案 4 :(得分:1)
你做错了clearTimeout(timerid)
这个函数取了Timeout的id。
你可以实现这个目标
var mytimerid;
var doIt = function()
{
$('#comment_report').trigger('apexrefresh');
mytimerid = setTimeout("doIt()", 5000);
}
然后在需要时通过
停止超时 clearTimeout(mytimerid);
答案 5 :(得分:0)
您需要为包含id
。
但是在您的代码中,您似乎将doIt
分配给不返回任何内容的函数。
var timer;
timer = setTimeout("doIt()", 5000);
然后使用
if(timer)
clearTimeout(timer);