2009-08-05 5 views
0

Ma méthode fane une boîte div out et a un rappel qui appelle une méthode ... comme ceci:Jquery fadeOut exécute encore et encore le rappel, pourquoi est-ce et comment puis-je empêcher cela?

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

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

Lorsque cette exécute (onclick d'un bouton) J'ai une alerte resetWindow pour voir combien de fois il exécute.

Il semble exécuter pour toujours, mais je ne suis pas resté assis assez longtemps pour fermer les fenêtres d'alerte pour le savoir.

J'ai fait quelques recherches et lire dans la documentation Jquery:

Fonction

de rappel (en option) Une fonction à exécuter lorsque l'animation se termine, une fois pour chaque exécute élément d'animation contre.

Je me demandais, même si je ne la sortie en fondu 1 div, est-il compte que 1 .. plus 1 pour chaque élément enfant la div a?

Techniquement, ils sont animés parce que les éléments internes sont décolorés avec le div externe, mais si vous regardez le javascript dans firebug, seul le div externe que j'évanouis obtient son opacité/affichage changé.

Si c'est le cas, comment puis-je m'assurer que le rappel ne soit exécuté qu'une seule fois?

Edit: Il a été la ligne numWindowsOpen--; je n'avais pas défini numWindowsOpen avant que la fonction si pour une raison quelconque qui faisait l'appel plusieurs fois arriver ... Quelqu'un peut-il expliquer pourquoi ce qui se passait?

+0

Pouvez-vous aussi publier le code pour resetWindow? – Powerlord

+0

C'est juste une alerte, mais je l'ai ajouté de toute façon. – Matt

+0

Si vous restez dans un fichier console.log ($ ("#" + windowIdPrefix + "_ViewPanel"). Length); avant la ligne fadeOut qu'est-ce que vous obtenez? (ou faites une alerte à la place de console.log si vous n'avez pas installé firebug) – jammus

Répondre

0

problème était que numWindowsOpen n'a pas été déclaré avant qu'il ne soit décrémenté là ... Bon rappel pour vous assurer que vous regardez des choses simples comme ça avant d'aller tihngs plus compliquées.

0

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

function() { 
    alert('Test'); 
    resetWindow(windowIdPrefix); 
    numWindowsOpen--; 
} 
+0

Ajout d'une alerte ('Test'); fait une alerte de test une fois (si le fadeOut est là). De ce que vous avez écrit (sans fadeOut), la fonction resetWindow ne s'exécute qu'une seule fois. Ce n'est que lorsque le fadeOut est là que resetWindow est exécuté plusieurs fois – Matt

Questions connexes