1

我正在使用 Javascript 函数do_when来继续评估另一个函数并在它返回 true 时执行操作。我在这里找到了函数:javascript,等待某事为真,然后运行操作

这是do_when功能:

function do_when(predicate, action, timeout_step) {
    if (predicate()) {
        action();
    } else {
        setTimeout(do_when, timeout_step, predicate, action, timeout_step);
    }
}

我用它来调用一个jQuery函数:

do_when(function() {return tabledrawn;},
    function() {$("#mytable tbody tr td").first().click();}, 
    100);

在 Firefox 和 Chrome 中一切正常,但 IE9(及更早版本)失败。do_when具体来说,从setTimeout函数 调用时出现“预期对象”错误。

当我进行调试时,谓词和动作参数在do_when最初调用时正确显示为函数对象,但是当从函数再次调用它时,setTimeout它们都显示为未定义。看来我没有提供setTimeoutIE 希望看到它们的方式的论点。IE 中是否有适当的方法将函数对象及其参数作为参数传递?

编辑:
根据 SLaks 的建议,我更改do_when为以下内容:

function do_when(predicate, action, timeout_step) {
    if (predicate()) {
        action();
    } else {
        setTimeout(function () {
                       do_when(predicate, action, timeout_step);
                   }, 
                   timeout_step);
    }
}

这解决了我的问题。

4

1 回答 1

4

您正在将其他参数传递给setTimeout,并且您希望将它们传递给您的函数。

这是 Mozilla 独有的非标准功能。

相反,您需要将匿名函数传递给setTimeout,并使用您想要的任何参数调用您的函数。

于 2012-08-17T02:50:09.110 回答