在 JavaScript 代码中添加 5 秒的延迟,然后再单击下一步按钮
Add delay of 5 seconds in JavaScript code befor clicking next button
我正在执行此 JavaScript,这是不言自明的(我认为)。 class button
页面上有大约 100 个按钮,我希望它们一个一个地单击。一切正常。
但我想在单击下一步按钮之前添加 5 秒的延迟。
var mybtn = document.getElementsByClassName('.button');
for( var i=0; i<100; i++ ) {
mybtn[i].click();
}
您可以使用 setInterval
实现该功能。
不要手动指定 100
,而是使用长度 属性。
同时避免使用 getElementsByClassName
它不是标准的。大多数浏览器都支持 document.querySelectorAll
。
var mybtn = document.querySelectorAll('.button');
var i = 0;
var timer = setInterval(function() {
if( i < mybtn.length) {
mybtn[i].click();
console.log("Click handler for button " + i + " fired");
} else {
clearInterval(timer);
}
i = i + 1;
}, 5000);
<div class="button">Hi1</div>
<div class="button">Hi2</div>
<div class="button">Hi3</div>
<div class="button">Hi4</div>
<div class="button">Hi5</div>
您可以使用setTimeout函数每5秒调用一次点击函数
类似于:
setTimeout(function(){ mybtn[i].click(); }, 5000);
是这样的吗?
//var buttons = document.getElementsByClassName('.button'); // Not standard
var buttons = document.querySelectorAll('.button');
function clickButton(index) {
mybtn[index].click();
if(index < buttons.length) {
setTimeout("clickButton(" + (index+1) + ");", 5000);
}
}
setTimeout("clickButton(0);", 5000);
为了测试,我添加了 alert()
:
//var buttons = document.querySelectorAll('.button');
function clickButton(index) {
//mybtn[index].click();
alert("button" + index);
if(index < 100) {
setTimeout("clickButton(" + (index+1) + ");", 5000);
}
}
setTimeout("clickButton(0);", 5000);
如果你不介意使用另一个库来解决这个问题,那么我建议你使用 Kristopher Michael Kowal 的Q library. Using promises by using Array.prototype.reduce,在需要实现时迭代和解决承诺。
// Query all buttons
var buttons = document.querySelectorAll('.button');
// Register Click Event Handlers
Array.prototype.forEach.call(buttons, registerButtonClickHandlers);
// Invoke button click
Array.prototype.reduce.call(
buttons,
reduceButtonPromises ,
Q.when()
);
function registerButtonClickHandlers(button) {
button.addEventListener('click', function() {
// display time end
console.timeEnd(button.innerHTML);
});
}
function reduceButtonPromises(promise, button) {
// register promise callback
return promise.then(function() {
// deferred object
var deferred = Q.defer();
setTimeout(function() {
// set time start
console.time(button.innerHTML);
// click button
button.click();
// resolve the promsie to trigger the next promise
deferred.resolve();
}, 100);
// promise
return deferred.promise;
});
}
我正在执行此 JavaScript,这是不言自明的(我认为)。 class button
页面上有大约 100 个按钮,我希望它们一个一个地单击。一切正常。
但我想在单击下一步按钮之前添加 5 秒的延迟。
var mybtn = document.getElementsByClassName('.button');
for( var i=0; i<100; i++ ) {
mybtn[i].click();
}
您可以使用 setInterval
实现该功能。
不要手动指定 100
,而是使用长度 属性。
同时避免使用 getElementsByClassName
它不是标准的。大多数浏览器都支持 document.querySelectorAll
。
var mybtn = document.querySelectorAll('.button');
var i = 0;
var timer = setInterval(function() {
if( i < mybtn.length) {
mybtn[i].click();
console.log("Click handler for button " + i + " fired");
} else {
clearInterval(timer);
}
i = i + 1;
}, 5000);
<div class="button">Hi1</div>
<div class="button">Hi2</div>
<div class="button">Hi3</div>
<div class="button">Hi4</div>
<div class="button">Hi5</div>
您可以使用setTimeout函数每5秒调用一次点击函数
类似于:
setTimeout(function(){ mybtn[i].click(); }, 5000);
是这样的吗?
//var buttons = document.getElementsByClassName('.button'); // Not standard
var buttons = document.querySelectorAll('.button');
function clickButton(index) {
mybtn[index].click();
if(index < buttons.length) {
setTimeout("clickButton(" + (index+1) + ");", 5000);
}
}
setTimeout("clickButton(0);", 5000);
为了测试,我添加了 alert()
:
//var buttons = document.querySelectorAll('.button');
function clickButton(index) {
//mybtn[index].click();
alert("button" + index);
if(index < 100) {
setTimeout("clickButton(" + (index+1) + ");", 5000);
}
}
setTimeout("clickButton(0);", 5000);
如果你不介意使用另一个库来解决这个问题,那么我建议你使用 Kristopher Michael Kowal 的Q library. Using promises by using Array.prototype.reduce,在需要实现时迭代和解决承诺。
// Query all buttons
var buttons = document.querySelectorAll('.button');
// Register Click Event Handlers
Array.prototype.forEach.call(buttons, registerButtonClickHandlers);
// Invoke button click
Array.prototype.reduce.call(
buttons,
reduceButtonPromises ,
Q.when()
);
function registerButtonClickHandlers(button) {
button.addEventListener('click', function() {
// display time end
console.timeEnd(button.innerHTML);
});
}
function reduceButtonPromises(promise, button) {
// register promise callback
return promise.then(function() {
// deferred object
var deferred = Q.defer();
setTimeout(function() {
// set time start
console.time(button.innerHTML);
// click button
button.click();
// resolve the promsie to trigger the next promise
deferred.resolve();
}, 100);
// promise
return deferred.promise;
});
}