【问题标题】:jQuery - Uncaught RangeError: Maximum call stack size exceededjQuery - 未捕获 RangeError:超出最大调用堆栈大小
【发布时间】:2013-05-17 15:34:34
【问题描述】:

以下代码(请参阅Fiddle here)引发问题标题中提到的堆栈溢出。我试图让一个盒子阴影以脉冲效果显示在圆形图像周围。任何人都可以指出递归吗?我是一个 Javascript 新手,看不到它。谢谢。

HTML

<div id="pulseDiv"> 
      <a href="#" id="advisers-css-image">
           <div id="advisersDiv"><img src="http://ubuntuone.com/1djVfYlV62ORxB8gSSA4R4"></div>
      </a>
</div>

CSS

.pulse { box-shadow: 0px 0px 4px 4px #AEA79F; }

Javascript

function fadeIn() {
   $('#pulseDiv').find('div.advisersDiv').delay(400).addClass("pulse");
   fadeOut();
};

function fadeOut() {
   $('#pulseDiv').find('div.advisersDiv').delay(400).removeClass("pulse");
   fadeIn();
};

【问题讨论】:

  • 你有两个函数可以毫无延迟地递归调用。
  • 知道了,谢谢 Kevin B - 另请参阅 PSL 的回答,它可以解决延迟问题。

标签: javascript jquery recursion


【解决方案1】:

您的调用是递归进行的,这会将函数无限地推入堆栈,从而由于递归行为导致最大调用堆栈超出错误。而是尝试使用 setTimeout,它是一个回调。

另外,根据您的标记,您的选择器是错误的。应该是#advisersDiv

Demo

function fadeIn() {
    $('#pulseDiv').find('div#advisersDiv').delay(400).addClass("pulse");
    setTimeout(fadeOut,1); //<-- Provide any delay here
};

function fadeOut() {
    $('#pulseDiv').find('div#advisersDiv').delay(400).removeClass("pulse");
    setTimeout(fadeIn,1);//<-- Provide any delay here
};
fadeIn();

【讨论】:

  • 非常感谢 PSL,感谢您提供正确答案并指出我的选择器标识符错误。
【解决方案2】:

您的fadeIn() 函数调用fadeOut() 函数,它再次调用fadeIn() 函数。递归在 JS 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 2012-03-30
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 2014-08-01
    相关资源
    最近更新 更多