我有一个名为RotatorNames的数组。它包含随机内容,但我们只是说它包含["rotatorA","rotatorB","rotatorC"]
。
我想循环遍历数组,并且对于每个要触发click事件的项目。我有一些工作,除了一切都立即触发。如何强制循环在继续循环之前等待几秒钟。
这就是我所拥有的。
function Rotator() {
var RotatorNames = ["rotatorA","rotatorB","rotatorC"];
RotatorNames.forEach(function(entry){
window.setTimeout(function() {
//Trigger that elements button.
var elemntBtn = $('#btn_' + entry);
elemntBtn.trigger('click');
}, 5000);
});
}
你可以运行它来查看我的问题。 http://jsfiddle.net/BxDtp/ 此外,有时警报会执行A,C,B而不是A,B,C。
答案 0 :(得分:5)
虽然我确定其他答案有效,但我更喜欢使用此设置:
function rotator(arr) {
var iterator = function (index) {
if (index >= arr.length) {
index = 0;
}
console.log(arr[index]);
setTimeout(function () {
iterator(++index);
}, 1500);
};
iterator(0);
};
rotator(["rotatorA", "rotatorB", "rotatorC"]);
DEMO: http://jsfiddle.net/BxDtp/4/
通过将“正确”值传递给setTimeout
来尝试使迭代正确排列,这对我来说似乎更合乎逻辑。
这允许按顺序连续迭代数组。如果您希望在完成一次后停止,请将index = 0;
更改为return;
。
答案 1 :(得分:3)
您可以根据当前索引增加超时时间:
RotatorNames.forEach(function(entry, i) {
window.setTimeout(function() {
//Trigger that elements button.
var elemntBtn = $('#btn_' + entry);
elemntBtn.trigger('click');
}, 5000 + (i * 1000)); // wait for 5 seconds + 1 more per element
});
答案 2 :(得分:0)
这样的事情应该做你以后的事情:
function Rotator(index){
var RotatorNames = ["rotatorA","rotatorB","rotatorC"];
index = (index === undefined ? 0 : index);
var $btn = $("#btn_"+RotatorNames[index]);
$btn.click();
if(RotatorNames[index+1]!==undefined){
window.setTimeout(function(){
Rotator(index+1);
}, 500);
}
}
答案 3 :(得分:0)
尝试:
var idx = 0;
function Rotator() {
var RotatorNames = ["rotatorA", "rotatorB", "rotatorC"];
setTimeout(function () {
console.log(RotatorNames[idx]);
idx = (idx<RotatorNames.length-1) ? idx+1:idx=0;
Rotator();
}, 5000);
}
Rotator();
<强> jsFiddle example 强>
(请注意,我使用console.log
代替alert
)