O JQuery é o framework Javascript, e a cada nova versão, novos recursos são implementados. Nas últimas versões, foram implementados novos métodos que possibilitam a delegação de listener sem maiores dificuldades.
Como utilizar os novos métodos On e Off do JQuery
DELEGANDO EVENTOS
Ao definir listener de eventos no JQuery, a forma mais utilizada e a mais simples é:
// Exemplo de listener do evento click.
$("[seletor]").click( funcrion() {
[comandos]
} );
Até ai tudo bem. Acontece que se o seletor for adicionado ao DOM depois que a página for carregada com a utilização do método append() do JQuery, com a uma execução Ajax, o listener se perderá uma vez que o elemento do seletor ainda não existia quando o listener for definido.
Conforme a própria equipe do JQuery recomenda, a melhor forma de construir listeners é com a utilização do método on() e para destruir usar o método off().
Então o código acima ficaria assim:
// Exemplo de listener do evento click usando on().
$('[seletor]').on('click', function(event) {
event.preventDefault();
});
Isso funcionaria mas não resolveria o problemas da perda do listener para os elementos adicionados posteriormente ao DOM. Para resolver o problema, deve-se utilizar a segunda sintaxe do método on(), passando-se o seletor que receberá o listener no segundo parâmetro de on().
$(document).on('click', 'a', function(event) {
event.preventDefault();
});
Desta forma, estamos construindo o listener para a evento click para todo o documento (document) que já está no DOM, e passando o a seletor de filtro, no exemplo uma âncora, como filtro. Assim, todos os elementos de âncora que fazem parto de document, incluindo os adicionados posteriormente ou dinamicamente ao DOM, receberam o listener.
REMOVENDO EVENTOS
Já, se for necessário remover um listener de um elemento do DOM, deve-se utilizar o método Off().
// Remove todos os eventos das âncoras no DOM.
$('a').off();
// Remove apenas o evento "submit" de todos os formulários no DOM.
$('form').off('submit');