Frage

Meine Methode verblasst eine Div -Box und hat einen Rückruf, der eine Methode aufruft ... wie folgt:

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

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

Wenn dies ausgeführt wird (Onclick einer Taste), habe ich eine Warnung in Resetwindow, um zu sehen, wie oft es ausgeführt wird.

Es scheint für immer auszuführen, aber ich habe nicht lange genug dort gesessen, um die Alarmfenster zu schließen, um es herauszufinden.

Ich habe einige Nachforschungen angestellt und in der Jquery -Dokumentation gelesen:

Rückruffunktion (optional)
Eine Funktion, die ausgeführt werden muss, wenn die Animation abgeschlossen ist, führt einmal für jedes Element ausgeführt, das animiert wird.

Also habe ich mich gefragt, obwohl ich nur 1 Div verblasse, zählt es als 1 .. Plus 1 für jedes untergeordnete Element, das das DIV hat?

Technisch gesehen werden sie animiert, weil die inneren Elemente mit dem äußeren Div verblasst werden, aber wenn Sie sich das JavaScript in Firebug ansehen, wird nur die äußere DIV, die ich verblasse, seine Opazität/Anzeige geändert.

Wenn dies passiert, wie passiert ich dann sicher, dass der Rückruf nur einmal ausgeführt wird?

Bearbeiten: Es war die Linie numWindowsOpen--; Ich hatte Numwindowsopen vor der Funktion nicht definiert, so dass aus irgendeinem Grund, der den Anruf mehrmals geschafft hat ... kann jemand erklären, warum dies geschah?

War es hilfreich?

Lösung 2

Das Problem war, dass Numwindowsopen nicht deklariert wurde, bevor es dort dekrementiert wurde ... Gute Erinnerung, um sicherzustellen, dass Sie nach einfachen Dingen suchen, bevor Sie zu komplizierteren Tihngs gehen.

Andere Tipps

Der Rückruf sollte nur einmal für jedes Element aufgerufen werden, das mit dem Selektor übereinstimmt. Sehen Sie mehrere Warnungen, wenn Sie eine Warnmeldung direkt in den Rückruf einfügen?

function() {
    alert('Test');
    resetWindow(windowIdPrefix);
    numWindowsOpen--;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top