在$ .each的jQuery迭代中添加静态暂停

时间:2017-01-11 23:49:00

标签: javascript jquery

如何在此循环中添加1000毫秒的延迟?我检查了this结果,看来他们根据变量创建了自己的方法。我只想在selector()函数调用的每次迭代之间添加静态暂停时间。

(function doIt(){
    $.each(personArray, function(index, person){
         $(this).delay(1000 * index)selector(person.RPI)
});
});

编辑:为了在这个问题上添加更多内容,我特别努力为每个数组项调用一次函数后找到一种让我的脚本暂停的方法。或者:

  • 参考数组项目1
  • 调用函数(数组项1)
  • 暂停一段时间
  • 参考数组项目2
  • 调用函数(数组项2)
  • 等。

我得到了关于在整个函数的迭代之间暂停的答案,但是我正在寻找一种方法,每个数组项执行一次,中间有一个暂停。

编辑:经过多次阅读后,我重新组织了我的代码,如下所示:

var i= 0;
var interval = 3000;
(function iterate () {
    if (personArray.length > i) {
        $('#name').html((personArray[i].first))
        var x = (personArray[i].RPI);
        selector(x);
        i++;
    }
    setTimeout(iterate, interval);
})();

现在......一个更重要的问题是,如何以一段间隔重新启动整个功能,例如24秒?我可以用24000 snd参数将其包含在另一个setTimeout函数中吗?这是一个小提琴:



function person(first, last, RPI) {
	this.first = first;
	this.last = last;
	this.RPI =  RPI;
}
var MW = new person('Mike', 'W', 112792);
var MT = new person('Matt', 'T', 157750);
var DR = new person('Derek', 'R', 165413);
var DD = new person('Darrell', 'D', 112794);
var AG = new person('Andrew', 'G', 137183);
var KR = new person('Kris', 'R', 157751);
var BJ = new person('Bill', 'J', 82517);
var personArray = new Array();
var personArray = [MW, MT, DR, DD, AG, KR, BJ];
var i= 0;
var interval = 3000;
(function iterate () {
    if (personArray.length > i) {
				var x = (personArray[i].RPI);
        $('#name').html((personArray[i].first));
        selector(x);
        i++;
				setTimeout(iterate, interval);
    }
})();
function selector(x){
	$('#name2').html("this is x:"+ x ); 
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<p id="name"></p>
<p id="name2"></p>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

以下是您脚本的简化版本。它按预期工作。

您的脚本中似乎没有初始化i。在我的脚本中,我使用{<1}}我初始化:

arr.i
var arr=[{RPI:10},{RPI:20},{RPI:30},{RPI:40},{RPI:50}];
arr.i=0;
$(function(){
 (function iterate () {
   if (arr.length > arr.i) {
     $('#name').html(arr[arr.i++].RPI+'<br>')
     setTimeout(iterate, 1000);
   }
 })();
});