O JQuery Fadeout executa o retorno de chamada repetidamente, por que isso e como posso impedir isso?

StackOverflow https://stackoverflow.com/questions/1234154

Pergunta

Meu método desaparece uma caixa div e tem um retorno de chamada que chama um método ... como este:

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

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

Quando isso é executado (OnClick de um botão), tenho um alerta no ResetWindow para ver quantas vezes ele é executado.

Parece executar para sempre, mas não fiquei lá por tempo suficiente, fechando as janelas de alerta para descobrir.

Eu fiz algumas pesquisas e li na documentação do jQuery:

Função de chamada (opcional)
Uma função a ser executada sempre que a animação é concluída, executa uma vez para cada elemento animado contra.

Então, eu estava me perguntando, mesmo que eu esteja apenas desaparecendo 1 div, isso conta como 1 .. mais 1 para cada elemento filho que o div?

Tecnicamente, eles estão sendo animados porque os elementos internos estão sendo desbotados com a divisão externa, mas se você assistir o JavaScript na Firebug, apenas a divisão externa, estou desaparecendo, ele alterará sua opacidade/tela.

Se é isso que está acontecendo, como faço para garantir que o retorno de chamada seja executado apenas uma vez?

Editar: Era a linha numWindowsOpen--; Eu não tinha definido o NumWindowSoPopn antes da função, por algum motivo que estava fazendo a ligação acontecer várias vezes ... Alguém pode explicar por que isso estava acontecendo?

Foi útil?

Solução 2

O problema era que o NumWindowSopen não foi declarado antes de diminuir lá ... um bom lembrete para garantir que você procure coisas simples assim antes de ir a tihhngs mais complicados.

Outras dicas

O retorno de chamada deve ser chamado apenas uma vez para cada elemento que correspondesse ao seletor. Você vê vários alertas ao colocar uma mensagem de alerta diretamente no retorno de chamada?

function() {
    alert('Test');
    resetWindow(windowIdPrefix);
    numWindowsOpen--;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top