Jquery递归错误太多

Jquery递归错误太多,jquery,recursion,colors,jquery-animate,Jquery,Recursion,Colors,Jquery Animate,我希望有人能帮助我 我有以下代码: <script> $(document).ready(function() { spectrum(); function spectrum(){ $('#bottom-menu ul li.colored a').animate( { color: '#E7294F' }, 16000); spectrum2(); } function spectrum2(){ $('#bottom-menu ul li.color

我希望有人能帮助我

我有以下代码:

<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>

$(文档).ready(函数(){
频谱();
函数谱(){
$(#底部菜单ul li.colored a')。动画({color:'#E7294F'},16000);
频谱2();
}
函数谱2(){
$(#底部菜单ul li.colored a')。动画({color:'#3D423C'},16000);
频谱();
}
});
它正在工作,但当我看firebug时,它说有太多的递归错误

我希望有人能告诉我为什么


谢谢

问题在于脚本从未停止执行

当页面加载时,您告诉它运行函数
spectrum()
。它运行此函数,然后被告知运行函数
spectrum2()
,它会这样做。当它完成
spectrum2()
时,您告诉它再次运行
spectrum()
,完成后它必须再次运行
spectrum2()
。。看到模式了吗?你可怜的脚本永远无法一遍又一遍地执行这两个函数

调用一个函数本身(或两个函数相互重复调用)的过程,但通常递归最终以某种方式终止。你的脚本永远不会终止,所以FireBug说“等等,这个脚本永远不会结束,我最好抛出一个错误!”


这可能不是您想要实现的目标,而且修复很可能很简单。如果你能解释一下你想要实现什么,也许我们可以帮助你编写正确的代码?

你有一个清晰的无止境递归。specturm()调用spectrum2(),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>

$(文档).ready(函数(){
频谱();
功能谱(toEnd){
$('#底部菜单ul li.colored a')。动画({color:'#E7294F'},16000,函数(){
如果(!toEnd)
频谱2(真);
});
}
功能谱2(toEnd){
$('#底部菜单ul li.colored a')。动画({color:'#3D423C'},16000,函数(){
如果(!toEnd)
光谱(真);
});
}
});

使用setTimeout从堆栈中删除调用函数:

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

这样,spectrum就有机会在您启动spectrum2时完成。spectrum2也是如此。

欢迎访问SO,请不要忘记访问Hi。谢谢你的回复,我真的很感激。关于代码-我试图使菜单项文本闪烁,这就是我试图实现的。spectrum()将文本颜色设置为黑色,spectrum2()将文本颜色设置为红色。代码实际上正在工作,我只是为firebug发现的错误而烦恼