【发布时间】: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