我的问题是:有没有一种独特的方法来重置计时器而不知道他们在Javascript中的ID?我尝试使用此代码:
var maxId = setTimeout(function(){}, 0);
for(var i=0; i < maxId; i+=1) {
clearTimeout(i);
}
我知道这会搜索任何计时器并清除任何计时器,但没有任何反应,我认为当我将它用作书签时,控制台甚至会给我一个错误。此外,计时器的值存储在innerHTML中,如下所示:
<div id="timer">
<div id="timer-minutes" class="timer-fields">00:00</div>
</div>
答案 0 :(得分:0)
查看此问题的一种独特方法是覆盖setTimeout的默认功能。通过扩充功能,您可以在页面上使用setTimeout的所有用途。然后,您只需创建一个新方法来清除所有超时。
在下面的代码中,我用自己的版本热线连接内置函数(setTimeout)。只要此代码在页面上的其他脚本之前执行,我就可以跟踪页面上函数的所有调用。也许你甚至可以通过被调用者存储setTimeouts。
(function(win)
{
var _originalSetTimeout = setTimeout; //Store built-in function
var timers = []; //Maintain a collection of timers
win.setTimeout = function(func, delay) //Hijack the built-in function with your own
{
var timer = _originalSetTimeout(func, delay); //Invoke the built in
timers.push(timer); //Store the timer to your private array
};
win.clearAllTimeouts = function() //Create a new function on the window for resetting all timers
{
for(var i=0,length=timers.length;i<length;i++)
{
win.clearTimeout(timers[i]);
}
};
}(window));
连接此功能后,您可以使用以下代码进行测试:
var x=0;
function Test()
{
x++;
console.log('test: ' + x);
setTimeout(Test, 1000);
if(x === 5)
{
clearAllTimeouts();
console.log('all timeouts cleared!');
}
}
Test();
计数器将记录到5,然后一旦它调用clearAllTimeouts()函数。
在此处查看此操作: http://jsbin.com/bulayuro/1/edit