我正在使用jQuery在几个元素上设置一个定时器或间隔循环来检查它们每隔几秒钟。我试过设置一个计时器并检查是否应该重新启动计时器,或者设置和间隔并检查是否应该停止它。javascript定时器或使用闭包在循环中创建的时间间隔
虽然简化了,这基本上就是我需要:
var mytimers = new Array();
$('div.items').each(function() {
myID = $(this).attr('id');
mytimers[myID] = setInterval(function() { myFunction(myID) } , 3000)
});
function myFunction(param) {
alert(param);
if (something()) {
clearInterval(mytimers[param]);
}
}
该ID的类项目ID_1,ID_2,ID_3。但我只是得到3个警报全部给予id_3。在我的代码中,我开始尝试通过'this',但不断地简化它以找出问题。
我怎样才能得到它每次复制变量到一个新的地址?我知道我需要使用闭包。它似乎引用了其他var没有什么关系。
我试了一下,象这样的定时器简化到一个循环:
function tester(item) {
return function() {
alert(item);
};
}
for(x=1;x<=3;x++) {
setTimeout('(function() { tester(x) })(x)' , 3000);
}
但我觉得我只是在做我的问题变得更糟,并且似乎并没有做任何事情。
我已经搜索过以前的问题,但大多数都充满了大量额外的代码,而不是将其缩减到特定问题并以其他方式解决。 我想了解这个例子如何工作更好。在写这篇文章的时候,我的确做到了,我想通过帮助功能来启动计时器。
function tester(item)
alert(item);
function myTimer(item)
setInterval(function() { tester(item); }, 3000);
for(x=1;x<=3;x++)
myTimer(item);
这怎么能没有这样做呢?有更好的方法吗?
你真的应该用'var'声明所有你的局部变量,包括循环索引。 – Pointy 2010-07-20 20:35:05