所以我认为下面的代码将非常简单,但已成为一个很头痛的问题。它应该是一个循环,它会改变对象的不透明度并使其消失。JavaScript for循环和setTimeout问题
function doSomething()
{
var i = 10;
for(i = 10; i >=0; i = i - 1)
{
setTimeout("setOpacity('t1',"+ i +")", 100*i);
WRITE 1
}
}
function setOpacity(elem, hmm)
{
WRITE 2
document.getElementById(elem).style.opacity = (10 - hmm)/10;
document.getElementById(elem).style.filter = 'alpha(opacity=' + (10 - hmm)*10 + ')';
}
所以问题是,for循环从10倒数到0,这已经由位于WRITE 1.然而,在接收数字的setOpacity方法打印声明证实是从0开始计数到10,这已经通过打印语句在写入2确认。
我想知道为什么会发生这种情况以及如何修复它。我相信这跟在循环结束后执行方法调用的setTimeout调用有关,但是如果是这样,那么为什么值传递给setOpacity递增?
任何帮助,非常感谢。
我不看不出是什么问题,它的工作方式应该如何。如果它首先执行10 - 0,则会淡入元素。 –
啊,是的,截至目前,它正在工作,因为我实施的工作。如果你查看setOpacity函数,我从10中减去hmm,这样数字就是我想要的值。但是这并不能改变数字没有被正确传递的事实。解决方法给了我正确的功能,但我有兴趣在实现此代码时没有解决方法。 –
帮你一个忙 - 使用[jQuery](http://docs.jquery.com/Downloading_jQuery) - 它有['fadeIn()'](http://api.jquery.com/fadeIn/)/ [' fadeOut()'](http://api.jquery.com/fadeOut/) - 其他有用的东西 – mkilmanas