2012-11-06 37 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