我正在使用 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/