pha*_*zei 9 javascript closures loops timer setinterval
我正在使用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]);
}
}
Run Code Online (Sandbox Code Playgroud)
类项目的ID是id_1,id_2,id_3.但我只得到3个提醒id_3.在我的代码中,我开始尝试传递'this',但一直在简化它以找出问题.
我怎样才能让它每次都将变量复制到一个新地址?我知道我需要使用闭包.它似乎是在引用其他var var mater是什么.
我尝试将它简化为一个带有定时器的循环:
function tester(item) {
return function() {
alert(item);
};
}
for(x=1;x<=3;x++) {
setTimeout( '(function() { tester(x) })(x)' , 3000);
}
Run Code Online (Sandbox Code Playgroud)
但我认为我只是让我的问题变得更糟,而且似乎没有做任何事情.
我已经搜索过以前的问题,但大多数都填充了大量的额外代码,而不是削减特定的问题,并以其他方式解决.通过让这个例子有效,我想了解这是如何工作的.在写这篇文章的过程中,我确实设法了解我可以通过帮助功能来启动计时器.
function tester(item)
alert(item);
function myTimer(item)
setInterval( function() { tester(item); }, 3000);
for(x=1;x<=3;x++)
myTimer(item);
Run Code Online (Sandbox Code Playgroud)
没有这个怎么办呢?有更好的方法吗?
当你使用each时,你就处于闭包中,你只是忘记了var使你的变量在函数作用域中私有化
var mytimers = new Array();
$('div.items').each(function() {
**var** myID = $(this).attr('id');
mytimers[myID] = setInterval( function() { myFunction(myID) } , 3000)
});
function myFunction(param) {
alert(param);
if (something()) {
clearInterval(mytimers[param]);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2288 次 |
| 最近记录: |