2013-08-02 231 views
0

我正在嘗試創建一個自動更改的「旋轉」DIV。 我有一個函數switchRotator(id)使用JQuery來改變DIV的內容。 這裏是造成錯誤的函數:功能未定義錯誤

function launchTimedRotator(){ 

//timedSwitch is a boolean value that can be enabled/disabled with buttons 

if (timedSwitch) { 

    if (counter<2) { 
     counter++; 
    } else { 
     counter = 1; 
    } 

switchRotator(counter); 
setInterval("launchTimedRotator()",3000); 
return null; 
} 

}; 

正如你可以看到我試圖通過調用自身的功能到底使用遞歸。 我收到谷歌Chrome的開發者工具的錯誤是: 未捕獲的ReferenceError:launchTimedRotator事先不

+0

你的函數不是全局的,如果你傳遞一個字符串,這是必需的。你可以做'setInterval(launchTimedRotator,3000);',但爲什麼遞歸?您將同時運行的間隔數量呈指數增長。 –

+0

我在其中一個「旋轉器」上看到類似的概念後,我使用了遞歸。我會增加嗎?它只是調用自己,然後結束,功能不重複。或者我錯過了什麼? – slava

+1

'setInterval()'每3秒連續運行一次該函數。所以當它再次調用函數時,它會啓動另一個'setInterval',但原始的仍在運行,所以現在你有兩個。然後再過3秒鐘,這兩個人會再次調用函數,再創建兩個,原來的兩個仍然在運行,四個,然後是八個,然後是十六個......等等。 –

回答

1

setInterval()使用字符串定義

由於不是很好的做法。改用匿名功能:

setInterval(function() { 
    launchTimedRotator(); 
}, 3000); 

雖然setInterval似乎並沒有在它的位置。它最終會創建很多間隔的範例。也許你打算使用setTimeout代替?

通常,您可以使用setInterval()setTimeout()獲得相同的效果;

setInterval情況下,將剛剛setInterval(function() {}, 3000),並且在setTimeout情況下,這將是

function runTimeout() { 
    setTimeout(function() { 
     runTimeout(); 
    }, 3000); 
} 

我個人更喜歡setTimeout(),能夠更可靠和易於管理。

+0

或'setInterval(launchTimedRotator,3000)' –

+0

SetTimeout是我想要的,你是對的。我使用了一個匿名函數+ setTimeout,它的功能就像一個魅力。非常感謝。我仍然對JS語法不熟悉 – slava