我的代码工作正常,但它会同时打开所有链接。我想延迟使用。
这会同时打开所有(多个功能“打开”):
waitForKeyElements ("input.submit[onclick*='Open']", clickOpenBtn);
但我想在每个函数调用(clickOpenBtn
)之间延迟。
我的完整代码段:
setTimeout(CheckForZero, 30000); // OR just call CheckForZero() if you don't need to defer until processing is complete
function CheckForZero() {
waitForKeyElements ("input.submit[onclick*='Open']", clickOpenBtn);
setTimeout(CheckForZero, 30000);
}
function clickOpenBtn (jNode) {
triggerMouseEvent (jNode[0], "click");
}
function triggerMouseEvent (node, eventType) {
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent (eventType, true, true);
node.dispatchEvent (clickEvent);
}
我该怎么办?
答案 0 :(得分:1)
您应该更加具体地了解waitForKeyElements中使用的选择器,类似于所有链接的父节点。因此actionFunction将执行一次然后你可以执行:
waitForKeyElements ("...", function (p) {
$("input.submit[onclick*='Open']", p).each(clickOpenBtn);
});
function clickOpenBtn (index, jNode) {
setTimeout(function () {
triggerMouseEvent (jNode[0], "click");
}, 1000 * index);
}
答案 1 :(得分:1)
在这种情况下,将节点推入FIFO队列并使用setInterval
而非setTimeout
来处理队列。代码变为:
var nodesToClick = []; //-- This array will hold the FIFO queue.
waitForKeyElements ("input.submit[onclick*='Open']", loadNodeQueue);
function loadNodeQueue (jNode) {
nodesToClick.push (jNode[0]); //-- Add to end
}
var nodeClkInterval = setInterval (workNodeQueue, 30000);
function workNodeQueue () {
if (nodesToClick.length) {
var node = nodesToClick.shift (); //-- Remove from beginning
triggerMouseEvent (node, "click");
}
}
function triggerMouseEvent (node, eventType) {
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent (eventType, true, true);
node.dispatchEvent (clickEvent);
}