web-dev-qa-db-ja.com

jQuery-Uncaught RangeError:最大呼び出しスタックサイズを超えました

次のコード( 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();
};
25

呼び出しは再帰的に行われます。これにより、関数が無限にスタックにプッシュされ、再帰的な動作による最大呼び出しスタック超過エラーが発生します。代わりに、コールバックである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();
38
PSL

fadeIn()関数はfadeOut()関数を呼び出し、これはfadeIn()関数を再度呼び出します。再帰はJSにあります。

3
Duan Walker