1

我的代码工作正常,除了它同时打开所有链接。我想使用延迟。

这会同时打开所有(多个“打开”功能):

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);
}


我能做些什么?

4

2 回答 2

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);
}
于 2013-09-25T03:44:01.450 回答
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);
}
于 2013-09-25T01:06:58.630 回答