web-dev-qa-db-fra.com

jQuery - UnCaught RangeError: dépassement de la taille maximale de la pile d'appels

Le code suivant (voir Fiddle here ) lève le débordement de pile mentionné dans le titre de la question. J'essaie d'obtenir une ombre de boîte à afficher autour d'une image circulaire dans un effet d'impulsion. Quelqu'un peut-il signaler la récursivité, s'il vous plaît? Je suis très novice en Javascript et je ne le vois pas. Merci.

[~ # ~] 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
Clive van Hilten

Vos appels sont effectués de manière récursive, ce qui pousse les fonctions sur la pile à l'infini, ce qui provoque une erreur de dépassement de la pile d'appels maximale en raison d'un comportement récursif. Essayez plutôt d'utiliser setTimeout qui est un rappel.

En fonction également de votre balisage, votre sélecteur est erroné. CA devrait etre #advisersDiv

Démo

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

votre fonction fadeIn() appelle la fonction fadeOut(), qui appelle à nouveau la fonction fadeIn(). la récursivité est dans le JS.

3
Duan Walker