【问题标题】:Passing a Javascript function as an argument in IE在 IE 中将 Javascript 函数作为参数传递
【发布时间】:2012-08-17 02:48:39
【问题描述】:

我正在使用 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(及更早版本)失败。具体来说,当从 setTimeout 函数调用 do_when 时,我收到“预期对象”错误。

当我进行调试时,谓词和操作参数在最初调用 do_when 时正确显示为函数对象,但当从 setTimeout 函数再次调用时,它们都显示为未定义。看来我没有以 IE 想要看到的方式向 setTimeout 提供参数。 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);
    }
}

这解决了我的问题。

【问题讨论】:

    标签: javascript internet-explorer


    【解决方案1】:

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

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

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

    【讨论】:

    • 对所有非标准行为表示蔑视和仇恨! Mozilla应该提升它的游戏!等一下,Mozilla?抱歉,误认为是 IE。在那种情况下,非标准的东西很好......
    • 这让我想起了我被方便地通过我的$.proxy() 传递的“延迟”参数咬伤并导致一些头发拉扯的时间 =/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多