Javascript 无法清除超时
我有以下功能,可在自身上执行设置超时,即:Javascript 无法清除超时,javascript,jquery,Javascript,Jquery,我有以下功能,可在自身上执行设置超时,即: var doIt = function(){ $('#comment_report').trigger('apexrefresh'); setTimeout("doIt()", 5000); } 我的问题是,我试图通过发出以下命令来清除每5秒循环一次的setTimeout: clearTimeout(doIt); 不幸的是,这不起作用 如何清除上面的setTimeout?如果不将字符串传递给clearTimeout,则传递用于标识所述函数返回
var doIt = function(){
$('#comment_report').trigger('apexrefresh');
setTimeout("doIt()", 5000);
}
我的问题是,我试图通过发出以下命令来清除每5秒循环一次的setTimeout:
clearTimeout(doIt);
不幸的是,这不起作用
如何清除上面的setTimeout?如果不将字符串传递给clearTimeout,则传递用于标识所述函数返回的setTimeout的数字
var timeoutId = null;
var doIt = function() {
$('#comment_report').trigger('apexrefresh');
timeoutId = setTimeout(doIt, 5000);
};
clearTimeout(timeoutId);
或者,在doIt内部,检查条件是否满足,然后仅在发出另一个setTimeout调用之前返回,这样就不必跟踪id。您需要为保存id的setTimeout分配一个变量 但在代码中,您似乎将doIt分配给了一个不返回任何内容的函数
var timer;
timer = setTimeout("doIt()", 5000);
然后使用
if(timer)
clearTimeout(timer);
setTimeout返回一个id,然后可以传递给clearTimeout函数
var timeoutId = null;
var doIt = function() {
$('#comment_report').trigger('apexrefresh');
timeoutId = setTimeout(doIt, 5000);
};
clearTimeout(timeoutId);
此外,与此相反:
setTimeout("doIt()", 5000);
setTimeout(doIt, 5000);
您只需传递一个函数:
那你应该用
clearTimeout(myTimeout);
您做得不对clearTimeouttimerid此函数的id为Timeout。
您可以通过以下方式实现此目标:
var mytimerid;
var doIt = function()
{
$('#comment_report').trigger('apexrefresh');
mytimerid = setTimeout("doIt()", 5000);
}
然后在需要时,通过
clearTimeout(mytimerid);
4分钟内回答6个问题。。。你怎么知道你应该用谷歌搜索它…:-谢谢为了记录在案,我确实尝试过这个,但似乎对我不起作用,但现在效果很好-显然错过了一些东西。再次感谢。
clearTimeout(mytimerid);