2016-10-31 65 views
0

我刚刚遇到了一些问题。所以我有一系列的div名称,我想将它们添加到class中,然后删除它们以便设置它们。因此,首先显示了在第二和半秒钟后消失,并通过阵列后,第二等我下一次循环,并没有真正发生的情况:/ 请帮我这个功能:/在少数项目中添加延迟

function showAndRepeat(){ 
 
    for(var z=0;z<clickNext.length;z++){ 
 
    console.log(colors[clickNext[z]]); 
 
    setTimeout(function(){$(colors[clickNext[z]]).addClass(colorNames[clickNext[z]])},1000); 
 
    setTimeout(function(){$(colors[clickNext[z]]).removeClass(colorNames[clickNext[z]])},1500); 
 
    } 
 
}

+0

除了给定的答案,for循环是同步的,你正在设置所有的'setTimeout'函数同时触发。像'setTimeout(函数... bla bla,1000 *(z + 1))'和'setTimeout(函数... bla bla,1000 *(z + 1)+ 500)' – Redu

回答

0

假设jQuery代码工作正常。 试试这个:

function showAndRepeat(){ 
    for(var z=0;z<clickNext.length;z++){ 
    console.log(colors[clickNext[z]]); 
    (function(zee){ 
     setTimeout(function(){$(colors[clickNext[zee]]).addClass(colorNames[clickNext[zee]])},1000); 
     setTimeout(function(){$(colors[clickNext[zee]]).removeClass(colorNames[clickNext[zee]])},1500);  
    })(z); 
    } 
} 

简单地说,创建一个闭包。

for loop是同步操作,而setTimeout是异步操作。因此在执行setTimeout时,for循环已经运行并且最新值z被送入setTimeout呼叫。