2016-12-04 123 views
0

我需要幫助插入一些東西,比如執行該「code()」之間的延遲。例如,我希望它每4秒鐘一個接一個地執行。因此,像第一個執行, 4秒後代碼再次執行,以此類推給具有給定類的每個元素。需要在每個元素之間添加時間延遲

我還在使用.this中的「code()」,所以我需要它留在那裏,因爲例如即時通訊獲得每個給定類的id並使用它。

var myFunction = function(){ 

     $(".someClass").each(function(){ 

      if(this.style.opacity != "0.5"){ 


       code(); 


      } 

     }); 
    }; 
+2

您是否嘗試過使用的setInterval(代碼4000) – carton

+1

@carton它會在4秒後完成所有的每一個,每個都不是異步的。 –

+1

可能的重複[什麼是sleep()的JavaScript版本?](http://stackoverflow.com/questions/951021/what-is-the-javascript-version-of-sleep) –

回答

3

你可以簡單地使用each循環索引使用超時耽誤它:

var myFunction = function() { 
    $(".someClass").each(function(i) { 
    setTimeout(function() { 
     if (this.style.opacity != "0.5") { 
     code(); 
     } 
    }.bind(this), i * 4000); // bind relevant context 
    }); 
}; 

其他版本,使用filter()

var myFunction = function() { 
    $(".someClass").filter(function(){ 
    return this.style.opacity != "0.5"; 
    }).each(function(i) { 
    setTimeout(code.bind(this), i * 4000); 
    }); 
}; 
+0

代碼的第一個版本很好,但是如果我希望它首先檢查每個元素的不透明度,並且只有在該情況爲true時才執行該代碼,該怎麼辦? 因爲現在,例如,如果前兩個是錯誤的,第三個是true,它會在等待第三個和執行代碼之前等待8秒。 – PredatorIWD

+0

第二個使用filter()應該像你期望的那樣工作 –

+0

現在它首先檢查該類的所有元素的不透明度,但是在第二個代碼中它執行的是「code()」,甚至比4秒快,如果有一個元素是真的,它會多次執行它的代碼......如果還有更多的話,它不會進入下一個... – PredatorIWD