jQuery将全局变量传递给setInterval()循环

时间:2013-08-23 13:46:21

标签: jquery loops setinterval

这是我的代码:

function flipCounter(){
    for(j=0; j<heights.length; j++){
        counter = 0;        
/*      setInterval(function(){   */
            if(counter < heights[j]){
                counter = counter + 1;
                $('.skill-table #bars').find('td').eq(j).find('label').html(counter+'%');
            }
/*      },10);                    */
    }
}

目标是每10毫秒更新一个标签内的值,直到该值达到存储在数组高度[] 中的值。正如你所看到的,我已尝试使用setInterval循环,但这样做,高度变为未定义

整个函数可以使用while循环:

while(counter < heights[j]){
    counter = counter + 1;
    $('.skill-table #bars').find('td').eq(j).find('label').html(counter+'%');
}

完全省略 setIntveral 。但这样标签中的值会立即发生变化。但我确实试图把它推迟到10毫秒。在while循环中添加 setTimeout 是不行的。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

关闭变量

function flipCounter(){
    for(j=0; j<heights.length; j++){
        (function(idx){
            var counter = 0;        
            setInterval(function(){   
                if(counter < heights[idx]){
                    counter = counter + 1;
                    $('.skill-table #bars').find('td').eq(idx).find('label').html(counter+'%');
                }

            },10);                    
        })(j)
    }
}