var flag = true;
function changeColor (element) {
if(flag==true){
document.getElementById(NAME+element).style.background="red";
flag=false;
}
else if (flag==false){
document.getElementById(NAME+element).style.background="white";
flag = true;
}
}
var temp;
for(var i=0;i<elements_array.length;i++)
{
alert("VAL="+elements_array[i]);
temp = elements_array[i];
setInterval(function() { changeColor(temp); } ,300);
}
以上代码仅适用于最后一个值。我正在尝试更改从整数数组(elements_array)获得的特定单元格的颜色。
在警报中我正确得到数组值,比如2,5,8。但只有第8个(最后一个)正在改变颜色。
但是,如果我将值硬编码为以下所有单元格都会改变颜色。
setInterval(function() { changeColor(2); } ,300);
setInterval(function() { changeColor(5); } ,300);
setInterval(function() { changeColor(8); } ,300);
关于为什么循环不起作用的任何想法?谢谢
答案 0 :(得分:4)
实际上,您的代码在temp
循环的所有迭代中引用相同的for
变量。这样,setInterval
函数的所有实例都会传递相同的引用,从而传递相同的值(在执行传递给setInterval
的函数时)。
要解决此问题,请使用以下函数之类的内容为setInterval
function createCB( val ) {
return function(){
changeColor( val );
};
}
并相应地将setInterval
电话改为
setInterval( createCB( temp ),300 );
附加函数调用实际上会复制temp
值,从而为changeColor
的每次调用传递不同的值。