Question

Ma méthode estompe une boîte de dialogue et comporte un rappel qui appelle une méthode ... comme ceci:

function closeWindow(windowIdPrefix, speed) {
    $("#" + windowIdPrefix + "_ViewPanel").fadeOut(speed,
        function() {
            resetWindow(windowIdPrefix);
            numWindowsOpen--;
        }
    );
}

function resetWindow(windowIdPrefix) {
   alert("resetting window");
}

Quand ceci s’exécute (un clic de bouton), j’ai une alerte dans resetWindow pour voir combien de fois il s’exécute.

Il semble fonctionner à l'infini, mais je ne suis pas resté assis assez longtemps à fermer les fenêtres d'alerte pour le savoir.

J'ai effectué des recherches et lu dans la documentation Jquery:

  

callback (facultatif) Fonction
  Une fonction à exécuter à la fin de l'animation, est exécutée une fois pour chaque élément animé contre .

Je me demandais donc, même si je ne masquais qu'une div, est-ce que cela compte comme un .. plus un pour chaque élément enfant de la div?

Techniquement, ils sont animés parce que les éléments internes sont effacés avec la division externe, mais si vous regardez le javascript dans firebug, seule la div extérieure que je suis en train d'obtenir un fondu change d'opacité / d'affichage.

Si c'est ce qui se passe, comment puis-je m'assurer que le rappel n'est exécuté qu'une seule fois?

Modifier: C’était la ligne numWindowsOpen -; je n’avais pas défini numWindowsOpen avant la fonction, donc pour une raison qui faisait que l’appel se produisait plusieurs fois .. Quelqu'un peut-il expliquer pourquoi cela se produisait?

Était-ce utile?

La solution 2

Le problème était que numWindowsOpen n’avait pas été déclaré avant qu’il ne soit décrémenté là-bas ... Bon rappel: assurez-vous de rechercher des choses simples comme celles-ci avant de passer à des tâches plus compliquées.

Autres conseils

Le rappel ne doit être appelé qu'une fois pour chaque élément correspondant au sélecteur. Voyez-vous plusieurs alertes lorsque vous insérez un message d'alerte directement dans le rappel?

function() {
    alert('Test');
    resetWindow(windowIdPrefix);
    numWindowsOpen--;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top