2016-12-04 146 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