无法清除超时
Unable to Clear Timeout
我有以下函数,它在自己身上执行setTimeout,即:
var doIt = function(){
$('#comment_report').trigger('apexrefresh');
setTimeout("doIt()", 5000);
}
我的问题是,我试图通过发出:来清除每5秒循环一次的setTimeout
clearTimeout(doIt);
不幸的是,这并没有奏效。
如何清除上面的setTimeout?
您不向clearTimeout()
传递字符串,而是传递标识setTimeout()
的Number
(由所述函数返回)。
var timeoutId = null;
var doIt = function() {
$('#comment_report').trigger('apexrefresh');
timeoutId = setTimeout(doIt, 5000);
};
clearTimeout(timeoutId);
或者,在doIt()
内部,检查条件,如果满足,则仅在向setTimeout()
发出另一个调用之前检查return
(这样就不必跟踪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为Timeout。你可以作为实现这一点
var mytimerid;
var doIt = function()
{
$('#comment_report').trigger('apexrefresh');
mytimerid = setTimeout("doIt()", 5000);
}
然后在需要时通过停止超时
clearTimeout(mytimerid);
您需要为保存id
的setTimeout分配一个变量。
但在您的代码中,您似乎将doIt
分配给了一个不返回任何内容的函数。
var timer;
timer = setTimeout("doIt()", 5000);
然后使用
if(timer)
clearTimeout(timer);
相关文章:
- Typeahead Bloodhoud没有't在TTL超时后清除缓存
- 清除启动范围外的超时
- 清除设置超时之前的间隔将不起作用
- 清除关闭中的超时
- 清除超时多次设置超时
- 清除在 jQuery 插件中启动的非全局超时
- 清除选择更改()的超时
- 奇怪的设置超时清除行为与jQuery AJAX
- 设置超时和清除交替点击超时
- 清除超时的问题
- 是否需要在运行后清除超时或最佳做法
- 设置间隔和设置超时清除
- 设置超时仍然触发,尽管清除超时
- 在 javascript 中,当网页未最小化或打开新选项卡时,清除超时前的计时器
- JavaScript 清除循环中的超时
- 一旦超时执行,清除或重新分配分配给 setTimeout 返回值的变量是否有任何技术点
- 清除运行时在它自己的函数中的超时
- JavaScript:数组中的多个清除超时
- 清除消息 jQuery 延迟设置超时
- 使用悬停超时浏览表行时清除隐藏值