Domanda

Il mio metodo dissolve un div box e ha un callback che chiama un metodo ... come questo:

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

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

Quando viene eseguito (onClick di un pulsante) ho un avviso in resetWindow per vedere quante volte viene eseguito.

Sembra funzionare per sempre, ma non mi sono seduto abbastanza a lungo chiudendo le finestre di avviso per scoprirlo.

Ho fatto alcune ricerche e letto nella documentazione di Jquery:

  

Funzione callback (Opzionale)
  Una funzione da eseguire ogni volta che l'animazione viene completata, viene eseguita una volta per ogni elemento animato contro .

Quindi mi chiedevo, anche se sto solo sbiadendo 1 div, conta come 1 .. più 1 per ogni elemento figlio che ha il div?

Tecnicamente vengono animati perché gli elementi interni vengono sbiaditi con il div esterno, ma se guardi il javascript in firebug solo il div esterno che sto svanendo ottiene la sua opacità / visualizzazione cambiata.

Se questo è ciò che sta accadendo, come posso assicurarmi che il callback venga eseguito una sola volta?

Modifica: Era la riga numWindowsOpen--; non avevo definito numWindowsOpen prima della funzione, quindi per qualche motivo stava facendo la chiamata più volte. Qualcuno può spiegare perché questo stava accadendo?

È stato utile?

Soluzione 2

Il problema era che numWindowsOpen non era stato dichiarato prima che fosse decrementato lì ... Un buon promemoria per assicurarti di cercare cose semplici come quella prima di passare a tihngs più complicati.

Altri suggerimenti

Il callback deve essere invocato solo una volta per ogni elemento che corrisponde al selettore. Vengono visualizzati più avvisi quando si inserisce un messaggio di avviso direttamente nel callback?

function() {
    alert('Test');
    resetWindow(windowIdPrefix);
    numWindowsOpen--;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top