One of the problems that I’ve faced with Javascript is passing multiple parameters through the setTimeout function. I found this little snippet on the internet a few months ago and would like to share it with you. I don’t know who the original author is so I could not give him/her proper credit. Thanks!
1 2 3 4 5 6 7 8 9 10 11 12 |
<script> var _st = window.setTimeout; window.setTimeout = function (fRef, mDelay) { if (typeof fRef == "function") { var argu = Array.prototype.slice.call(arguments,2); var f = (function () {fRef.apply(null, argu);}); return _st(f, mDelay); } return _st(fRef, mDelay); } </script> |
Define your function to call with setTimeout:
1 2 3 4 5 |
<script> function alertMe (message, name) { alert(message + name); } </script> |
Now, just call the function.
1 2 3 |
var message = 'Hello, '; var name = 'Richard'; setTimeout(alertMe, 2000, message, name); |
Hope this helps someone! 🙂
why would anyone like to overwrite the setTimeout method, when it’s so much easier to just write:
… am i missing something or did the original author of the snippet did not understand variable scope in javascript?
Hi Richard, thanks for sharing the code. It looks nice, but I think the following code can do this job easier. Don’t you think?
Underscore.js does it like this:
THIS IS JUST AWESOME! THANKS!!!
Thanks a lot !!!
I was looking for passing multiple args to setTimeout for hours. Now, it’s works !!!
Wow dude. You saved me from having a lot of headaches. Thanks!
Thanx so much Richard! Your solution is fantastic!
Thank you! This solution saved my day – been trying to overcome a problem of dynamically creating elements and attaching waits to them – the element waits need to remember the current variable states on execution. After hours I found this – thanks! 🙂