2016-10-31 18 views
0

ちょっとした問題があります。だから私はdiv名の配列を持っていると私は半分のクラスを追加し、それらが設定されている順序で削除したいと思います。だから、アレイと何も通じなど秒後に第一、第二の後のショーや半秒後に消え、次の私のループは本当に起こる:/ この機能で私を助けてください:/いくつかの項目に遅延を追加する

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

与えられた答えのほかに、ループの同期であり、あなたが同時に発射するすべての 'setTimeout'機能を設定しています。 「setTimeout(funct ... bla bla、1000 *(z + 1))」や「setTimeout(funct ... 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ループは同期操作ですが、setTimeoutは非同期です。したがって、setTimeoutが実行されるまでには、forループが既に実行されており、zという最新の値がsetTimeoutコールに供給されます。

関連する問題