在IE中传递Javascript函数作为参数

时间:2012-08-17 02:48:39

标签: javascript internet-explorer

我正在使用Javascript函数do_when继续评估另一个函数,并在返回true后执行操作。我在这里找到了这个功能:javascript, wait for something to be true then run action

以下是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函数再次调用它时它们都显示为未定义。似乎我没有向IE setTimeout提供IE想要看到它们的方式。 IE中是否有正确的方法将函数对象及其参数作为参数传递?

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

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

这解决了我的问题。

1 个答案:

答案 0 :(得分:4)

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

这是一种非标准的Mozilla功能。

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