【问题标题】:Jquery Too Much Recursion ErrorJquery太多递归错误
【发布时间】:2011-03-03 21:44:15
【问题描述】:

我希望有人可以帮助我。

我有这个代码:

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

它正在工作,但是当我查看 firebug 时,它说存在太多递归错误。

希望有人能告诉我原因。

谢谢!

【问题讨论】:

标签: jquery recursion colors jquery-animate


【解决方案1】:

问题是你的脚本永远不会停止执行。

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

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

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

【讨论】:

    【解决方案2】:

    你有一个明确的无限递归。 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>
    

    【讨论】:

    • 嗨。感谢所有的回复,我真的很感激他们。关于代码 - 我试图让菜单项文本闪烁,这就是我想要实现的目标。 Spectrum() 使文本颜色变为黑色,spectrum2() 使其变为红色。该代码实际上正在运行,我只是对 firebug 发现的错误感到困扰
    【解决方案3】:

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

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

    这样,频谱有机会在您开始频谱 2 时完成。对频谱 2 执行相同操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      相关资源
      最近更新 更多