2012-11-06 39 views
3

我想要一个JavaScript函数在页面加载后运行60秒。 经过我所做的一些研究,我发现setTimeout()是解决方案。JavaScript setTimeout不起作用

所以这就是我所做的:

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

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

为什么会发生?如何解决它?那里有setTimeout()的替代方法吗? 谢谢!

+2

嗯一些代码示例请... – Martin

+1

发布您的代码。 –

+1

它可能是任何东西:你是否将'postAction'或'postAction()'作为第一个参数传递给'setTimout'?第二个是_wrong_。你是否将字符串作为第一个参数传递?别。 timeOut以毫秒为单位指定,而不是秒数:因此,60秒写为60000 –

回答

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.这只是为了完整性的缘故
无论如何,重点线这里是setTimeout(postAction,60000);

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

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

谢谢!它的工作! –

+0

@IdoDoron:很高兴帮忙,快乐编码 –

0

您是否使用setTimeout喜欢:

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

我是: '' –

-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> 
+1

NOOOO'setInterval'没有分配间隔id。 ..这是错的!这会创建一个无限循环!继续@Martin,我敢把你的代码粘贴到你的控制台:) –

+0

是的,但不是太远,以防止这种情况。 – Martin

+1

对不起,但这得到-1:第一个建议导致了一个无限循环,并且你建议的解决方案是设置一个全局变量 - 只需使用'setTimeout',这就是它的作用 –

9

您需要的功能包postAction到推迟执行:

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

你实际上是立即执行postAction,你的代码就相当于ŧ o:

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

setTimeout(result, 60000); 
+1

太棒了!为我工作,+1 – F481

+1

清洁和适当..谢谢:) – shivi