我正在使用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);
}
}
这解决了我的问题。
答案 0 :(得分:4)
您正在向setTimeout
传递其他参数,并且您希望将它们传递给您的函数。
这是一种非标准的Mozilla功能。
相反,您需要将一个匿名函数传递给setTimeout
,并使用您想要的任何参数调用您的函数。