JavaScript setTimeout不起作用

时间:2012-11-06 22:13:14

标签: javascript jquery settimeout onload

我希望在加载页面后60秒运行JavaScript函数。 经过一番研究,我发现setTimeout()就是解决方案。

这就是我的所作所为:

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

不知何故,setTimeout不起作用。加载页面后,无需等待60秒,因为postAction()会立即运行。

为什么会这样?怎么解决?那里有setTimeout()的替代品吗? 谢谢!

4 个答案:

答案 0 :(得分:10)

您需要将postAction包装在函数中以推迟执行:

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

您实际上是立即执行postAction,您的代码相当于:

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

setTimeout(result, 60000);

答案 1 :(得分:0)

您使用的是setTimeout

setTimeout(function(){alert("OK");}, 1000 * 60); // alert "OK" in 60s

答案 2 :(得分:0)

在JS中执行所需操作的正确方法,即在页面加载后设置超时

(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));

代替window.onload = function(){setTimeout(postAction,60000);};,它也会起作用,但会导致IE中的内存泄漏<9。这仅仅是为了完整性&#39;为了
无论如何,这里的关键是setTimeout(postAction,60000);

更新
看到您正在使用的代码后,这是最简单的解决方法:

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

答案 3 :(得分:-2)

<script>
        function doSomeJavascript() {
            // javascript code goes here
           alert('5 secs is up!');
        }
        // calls function doSomeJavascript() 5 secs after page load
        var interval = setInterval(doSomeJavascript, 5000);

        setTimeout(function() {
           window.clearInterval(interval);
        }, 5000);
</script>