2010-06-15 120 views
2

我希望有人能幫助我。Jquery太多遞歸錯誤

我有這樣的代碼:

<script> 
$(document).ready(function() { 
spectrum(); 
function spectrum(){ 
    $('#bottom-menu ul li.colored a').animate({ color: '#E7294F' }, 16000); 
    spectrum2(); 
} 
function spectrum2(){ 
    $('#bottom-menu ul li.colored a').animate({ color: '#3D423C' }, 16000); 
    spectrum(); 
} 
}); 
</script> 

它的工作,但是當我看螢火它說,有一個太多的遞歸調用錯誤。

我希望有人能告訴我爲什麼。

謝謝!

+0

歡迎來到SO,請不要忘記訪問http://stackoverflow.com/faq – Reigel 2010-06-15 09:31:30

回答

4

問題是你的腳本永遠不會停止執行。

當頁面加載時,您告訴它運行功能spectrum()。它運行這個功能,然後被告知運行它的功能spectrum2()。當它完成spectrum2()時,你告訴它再次運行spectrum(),並且當它完成後,它必須再次運行spectrum2() ..查看模式?你可憐的腳本永遠不能執行這兩個函數!

函數調用自己的過程(或兩個函數重複調用對方)被稱爲recursion,但通常遞歸最終會以某種方式終止。你的永遠不會終止,所以FireBug說:「等一下,這個腳本永遠不會結束,我最好拋出一個錯誤!」

這可能不是你要達到的目的,而且修復很可能很簡單。如果你可以嘗試解釋你想達到的目標,也許我們可以幫助你編寫正確的代碼?

0

你有一個明確的無限遞歸。 specturm()調用spectrum2(),然後調用spectrum();你沒有終止條件。您需要添加一個條件來終止該遞歸。也許你想實現以下目標。如果你讓我們知道你想要達到的目標,那麼你會得到一個解決方案。

<script> 
$(document).ready(function() { 
spectrum(); 

function spectrum(toEnd){ 
    $('#bottom-menu ul li.colored a').animate({ color: '#E7294F' }, 16000, function(){ 
    if(!toEnd) 
     spectrum2(true); 
    }); 
} 
function spectrum2(toEnd){ 
    $('#bottom-menu ul li.colored a').animate({ color: '#3D423C' }, 16000, function(){ 

    if(!toEnd) 
     spectrum(true); 
    }); 
} 
}); 
</script> 
+0

嗨。感謝所有的答覆,我真的很感激他們。 關於代碼 - 我試圖讓菜單項文本閃爍,這就是我想要實現的。 spectrum()使文本顏色變成黑色,而spectrum2()使它變成紅色陰影。代碼實際上是在工作,我只是對螢火蟲發現的錯誤感到困擾 – user367082 2010-06-19 07:54:37

-1

使用的setTimeout從堆棧中刪除通話功能:

function spectrum(){ 
    $('#bottom-menu ul li.colored a').animate({ color: '#E7294F' }, 16000); 
    setTimeout(function() {spectrum2();},100); 
} 

這樣,頻譜有一個機會,而你開始spectrum2完成。與spectrum2相同。