2013-07-10 77 views
1

這可能是一個愚蠢的問題,但我有一個每隔30秒進行一次保存的setInterval。setInterval在刷新時執行

setInterval(SaveContent(true), 30000); 

我也試過

window.setInterval(SaveContent(true), 30000); 

setTimeout(setInterval(SaveContent(true), 30000), 30000); 
window. setTimeout(setInterval(SaveContent(true), 30000), 30000); 

setInterval的原因正在執行SaveContent當我刷新頁面,我不知道。我雖然想在做任何事情之前等待30秒?

回答

3

嘗試:

setInterval(function() {SaveContent(true)}, 30000); 

你不能直接將參數傳遞給函數調用,所以你需要將它嵌入在一個匿名函數。

()函數名稱調用它並返回一個值,在這種情況下返回setInterval函數。

您也可以選擇這樣調用它:

setInterval(SaveContent, 30000); 

,然後在你的函數:

function SaveContent(b) { 

    if (typeof b === 'undefined') b = true; //defaults to true 

    // ... 

} 
3

你想給一個函數傳遞給setInterval

setInterval(function(){ SaveContent(true); }, 30000); 

方式你現在擁有它,你立即執行SaveContent(true),然後將它的返回值傳遞給setInterval

+0

OK所以這是我cannnot接受直到7分鐘的答案。但我之前做過類似的事情。我在那裏定義了一個函數'function autoSave(){SaveContent(true)}',並將它傳遞給setInterval'setInterval(autoSave,30000)',但它不起作用。 –

+0

只是好奇:我在此之前發佈了我的答案,這是怎麼回事,用相同的點呢? – K3N

+1

@ Ken-AbdiasSoftware:它們以每頁加載的隨機順序出現。 – Ryan

0

在jQuery中可以使用$.proxy傳遞函數與預定義的說法:

setInterval($.proxy(SaveContent,null,true), 30000) 
+1

或使用'SaveContent.bind(null,true)'。 jQuery絕對不會爲你節省很多輸入,而不是在這裏輸入函數... – Ryan

+0

@minitech:是的,那也應該這樣做。我通常會用原生'bind'發佈答案,但人們會說「它與舊瀏覽器不兼容」,但「有一個[polyfill](https://developer.mozilla.org/en-US/docs/Web/ JavaScript/Reference/Global_Objects/Function/bind)「等,等等。 – elclanrs