Pergunta

Por exemplo, se eu tiver um link com o seguinte evento vinculado a ele:

$("a.d").bind("click", this, onDelete);

E mais tarde fazer:

$("a.d").remove();

Está bem? Ou isso causa um vazamento de memória e eu preciso chamar o desaceleração do primeiro?

Obrigado por qualquer ajuda.

Foi útil?

Solução

Eu não testei, mas acredito que remover um elemento desbaste seus manipuladores de eventos. Eu chego a esta conclusão do documentação da API do jQuery (Pesquise Remova) que afirma que, se você deseja mover um elemento de uma parte do DOM para outra:

$("#foo").remove().appendTo("#bar");

deve ser escrito como

$("#foo").appendTo("#bar");

Para evitar perder os manipuladores de eventos.

Outras dicas

Dos documentos jQuery para remover ()

Remove todos os elementos correspondentes do DOM. Isso não os remove do objeto jQuery, permitindo que você use os elementos correspondentes ainda mais. Observe que essa função que começa com 1.2.2 também removerá todos os manipuladores de eventos e dados em cache internamente.

A resposta é sim, desde que o evento fosse anexado ao jQuery. Se anexado com algo como "OnClick", não acredito que isso aconteça.

Este artigo discute parte disso. Ele também define uma função recursiva para remover todos os eventos de clique para um elemento e todos os seus filhos. Ele abordará os manipuladores de cliques do JQuery e os manipuladores definidos com o OnClick para que você esteja coberto.

http://www.computerhowtoguy.com/how-to-use-the-jquery-unbind-method-on-all-cild-elements/

function RecursiveUnbind($jElement) {
    // remove this element's and all of its children's click events
    $jElement.unbind();
    $jElement.removeAttr('onclick');
    $jElement.children().each(function () {
        RecursiveUnbind($(this));
    });
}

Para usar a função no exemplo anterior, chamaríamos a função que passa para a div "contêiner" como um objeto jQuery.

RecursiveUnbind($('#container'));

Para o registro, você não precisa se preocupar com vazamentos de memória no JavaScript. (Chill Man, não C ++!)

O motor JavaScript do navegador gerencia todos os objetos e o lixo os coleta. Quando digo objetos, isso significa funções de manipulação de eventos também, porque as funções também são objetos no JavaScript.

Não relacionado: eu amo como tudo é um objeto em JavaScript: D

Felicidades!
jrh

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top