I am using a Javascript function do_when
to keep evaluating another function and perform an action once it returns true. I found the function here: javascript, wait for something to be true then run action
Here is the do_when
function:
function do_when(predicate, action, timeout_step) {
if (predicate()) {
action();
} else {
setTimeout(do_when, timeout_step, predicate, action, timeout_step);
}
}
I am using it to call a jQuery function:
do_when(function() {return tabledrawn;},
function() {$("#mytable tbody tr td").first().click();},
100);
Everything works fine in Firefox and Chrome, but IE9 (and earlier) fails. Specifically, I get an "Object Expected" error when do_when
is called from the setTimeout
function.
When I do a debug, the predicate and action arguments correctly show up as function objects when do_when
is initially called, but when it is called again from the setTimeout
function they both show up as undefined. It appears I am not supplying the arguments to setTimeout
the way IE wants to see them. Is there a proper way in IE to pass a function object and its parameters as arguments?
EDIT:
Per SLaks suggestions I changed do_when
to the following:
function do_when(predicate, action, timeout_step) {
if (predicate()) {
action();
} else {
setTimeout(function () {
do_when(predicate, action, timeout_step);
},
timeout_step);
}
}
Which fixes my problem.
Answer
You're passing additional arguments to setTimeout
, and you're expecting them to be passed to your function.
That's a non-standard Mozilla-only feature.
Instead, you need to pass an anonymous function to setTimeout
, and call your function with whatever arguments you want inside of it.
No comments:
Post a Comment