2011-06-14 102 views
1

我試圖讓一個簡單的腳本來工作,但在某個地方我必須做錯了,因爲它不工作!我只是想設置一個調用函數的間隔時間。請提供一些幫助。也許不是最好的解決方案,但我是新手。setInterval調用函數的問題

$(document).ready(function() { 

startInterval(); // activate timer 

function startInterval() { 
var t = setInterval("autoSave", 20000); 
} 

function autoSave() { 
alert("test"); 
} 

}); 
+1

還要注意的是,如果你決定參數傳遞給函數'autoSave',創造像這樣的匿名函數: '變種T =的setInterval(函數(){ autoSave(param1,param2)},20000);' – Darcy 2011-06-14 17:41:15

回答

0

1)更好的做法是使t - 全局,否則它不會在startInterval()函數外部訪問。但你需要它來清除間隔

即聲明var t; function startInterval();

2之前)認爲:t = setInterval('autoSave()', 20000);

+0

如果我輸入var t = setInterval('autoSave()',2000),那麼間隔是否會開始?在$(document).ready(function(){... – 2011-06-14 17:54:31

+1

之後它工作時,我只是鍵入var t = setInterval(autoSave,2000); – 2011-06-14 17:59:15

4

刪除「」,並使其成爲函數的參考。

function startInterval() { 
    var t = setInterval(autoSave, 20000); 
    //     ^now you have a reference to 
    //     autoSave and setInterval knows 
    //     what to execute 
} 
6

無論這些人會工作,但不是你有什麼

// Pass the real function 
function startInterval() { 
    var t = setInterval(autoSave, 20000); 
} 

// THIS MAY NOT WORK 
// eval 
function startInterval() { 
    var t = setInterval("autoSave()", 20000); 
} 
// 

// Anonymous function 
function startInterval() { 
    var t = setInterval(function() { autoSave(); }, 20000); 
} 

這裏的推理:如果直接傳遞一個函數,它會調用它。但是,如果你傳遞一個字符串,它將在eval超時時間結束時返回一個函數 - 在你的情況下返回一個函數,而在第二種情況下返回評估函數(注意圓括號)

+0

嗯,我從一開始就有括號,現在我把它們放回去,但它仍然不起作用!? – 2011-06-14 17:30:34

+0

嗯,非常有趣,我認爲在過去幾個月裏有所改變,因爲第二種方法曾用於所有瀏覽器。無論如何,第一種方法是更好的做法。另請參閱第三個選項的更新答案。 – 2011-06-14 17:40:32