我想从for循环中设置8个超时。我有jquery id:ir1,ir2 ...,ir8。为什么以下不起作用:
var i = 1;
for (i; i<9; i++ ){
setTimeout( $('#ir'+i).hide(),100*i);
}
答案 0 :(得分:1)
http://jsbin.com/OrUVoRi/1/edit
var i = 0, elements = [];
//save jquery calls for performance reasons
for (i = 0; i<9; i++){
elements[i] = $('#ir'+i);
}
//you can make this function custom
var hide = function(i){
elements[i].hide();
};
//the callback loop
for (i = 0; i<9; i++){
//bind i value to the hide function
setTimeout( hide.bind(this, i), 1000*i );
}
答案 1 :(得分:0)
你的问题很模糊:我会解释:
乍一看,你有一个关闭问题:解决方案:
var i = 1;
for (i; i<9; i++){
(function(a){
setTimeout(function(){
$('#ir'+a).hide();
},1000*a);
})(i);
}
此外,由于所有超时都在突发中执行 - 您添加了更长的延迟:100*i
;
在其他解决方案中 - 这是我的:http://jsbin.com/EpaceSaJ/5/edit
不同之处在于,在您的情况下 - 无论内部代码的执行如何,函数都将精确地为100 * i 而在我的解决方案中:超时将在上一次操作的每个结束后开始。
(function g(i,max){
setTimeout(function ( )
{
console.log(i); // <-- put your stuff here
if (i==max) return false;
g((++i),max);
}, 1000);
})(1,3); // <--loop values from 1 to 3 (9 at your case)
答案 2 :(得分:0)
setTimeout()
应该是
setTimeout(function(){
$('#ir'+i).hide()
},100*i);
更新
正如@royi namir所提到的,问题是因为闭包(范围),调用自调用函数,传递i作为参数,将超时值增加到1000 ......仅作为示例
var i = 1;
for (i; i<9; i++){
(function(a){
setTimeout(function(){
$('#ir'+a).hide();
},1000*a);
})(i);
}