我正在使用 jQuery 在几个元素上设置一个计时器或间隔循环,以每隔几秒钟检查一次它们。我试过设置一个计时器并检查是否应该重新启动它,或者设置和间隔并检查是否应该停止它。
虽然简化了,但这基本上是我需要的:
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);
没有那个怎么办?有没有更好的办法?