javascript - 在 IE 中将 Javascript 函数作为参数传递

标签 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(及更早版本)失败。具体来说,当从 setTimeout 函数调用 do_when 时,我收到“Object Expected”错误。

当我进行调试时,当最初调用 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);
    }
}

这解决了我的问题。

最佳答案

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

这是一个非标准的 Mozilla 专有功能。

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

关于javascript - 在 IE 中将 Javascript 函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11999148/

相关文章:

Javascript:.js 文件之间共享的全局变量

php - 从 View 调用 Controller 方法

javascript - 在 Internet Explorer 中解析 xml 文档时 getAttribute 出错

css - 仅在某些服务器中出现奇怪的 IE 问题 : Dropdown menu hides behind an absolute positioned image,

java - Dos命令获取IE页面源

jQuery Ajax 并不适用于每个版本的 Internet Explorer

css - 用于 MusiSync 字体的 Internet Explorer CSS 行高

javascript - D3 : Draw merged lines as a single

javascript - 如何在 Angular <select>中获取选定的选项

javascript在添加它像字符串一样计算的值时