JavaScript setTimeout doesn't work

15,545

Solution 1

The correct way to do what you want in JS, ie setting a timeout after the page is loaded:

(function(w)
{
    var load = function()
    {
         setTimeout(postAction,60000);
         if (w.removeEventListener)
         {//remove listeners, to avoid leak...
             return w.removeEventListener('load',load,false);
         }
         return w.attachEvent('onload',load);
    };
    if (w.addEventListener)
    {
        return w.addEventListener('load',load,false);
    }
    return w.attachEvent('onload',load);
}(this));

Instead of window.onload = function(){setTimeout(postAction,60000);};, which will work, too, but cause a mem-leak in IE <9. That's just for completeness' sake
Anyway, the key line here is setTimeout(postAction,60000);

Update
After seeing the code you're using, this is the easiest fix:

<body onLoad="setTimeout(function(){ return postAction('news.reads', 'article');}, 60000);">

Solution 2

You need to wrap postAction in a function to defer execution:

setTimeout(function() { postAction('news.reads', 'article'); }, 60000);

You are actually executing postAction immediately, your code is equivalent to:

var result = postAction('news.reads', 'article');

setTimeout(result, 60000);
Share:
15,545
Ido
Author by

Ido

Updated on June 04, 2022

Comments

  • Ido
    Ido almost 2 years

    I wanted a JavaScript function to run 60 seconds after page is loaded. After a little research I have made, I've found that setTimeout() is the solution.

    So that's what I did:

    <body onLoad="setTimeout(postAction('news.reads', 'article'), 60000);">
    

    Somehow, setTimeout does not work. After the page is loaded, there's no need to wait 60 seconds because postAction() runs immediately.

    Why is it happening? How to solve it? Are there alternatives to setTimeout() up there? Thank you!