jQuery - 未捕获RangeError:超出最大调用堆栈大小

Cli*_*ten 25 javascript recursion jquery

以下代码(请参阅此处的小提琴)抛出问题标题中引用的堆栈溢出.我试图让一个盒子阴影在脉冲效果中显示在圆形图像周围.有谁可以指出递归,拜托?我是一个Javascript新手,无法看到它.谢谢.

HTML

<div id="pulseDiv"> 
      <a href="#" id="advisers-css-image">
           <div id="advisersDiv"><img src="http://ubuntuone.com/1djVfYlV62ORxB8gSSA4R4"></div>
      </a>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.pulse { box-shadow: 0px 0px 4px 4px #AEA79F; }
Run Code Online (Sandbox Code Playgroud)

使用Javascript

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

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

PSL*_*PSL 39

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

同样基于您的标记,您的选择器是错误的.它应该是#advisersDiv

演示

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();
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢PSL,既可以获得正确答案,也可以用选择标识符指出我的错误. (5认同)