Weblosofia com CSS, Jquery, Javascript, Ajax, PHP etc.
por Alexandre Magno
Postado em Novembro 22nd, 2007 por Alexandre Magno
Os dois primeiros parágrafos foram traduzidos de Why do my events stop working after an Ajax request? E o restante do texto uma abordagem sobre o tema
Frequentemente, quando você adiciona um evento click (ou qualquer outro) para todos os links usando $('a').click(fn), você encontrará que os eventos não funciona mais depois que você carrega um novo conteúdo para a página usando uma requisição Ajax.
Quando você chama $('a') ele retorna todos os links na página no momento e .click(fun) adiciona o handler para cada individual elemento. Quando novos links são adicionados, eles não são afetados pelos manipuladores de eventos(que seria o handler).
O que acontece é um problema da própria requisição httprequest, não de alguma framework, poderia culpar até o javascript, mas ele nunca pensou que fosse ficar tão famoso
com o Ajax, que nunca sonhou em ser uma ferramenta tão utilizada e cogitada.
Existe uma solução para jQuery chamada Livequery que permite que os eventos sejam reativados depois da página ser carregada com um novo dom, mas ela faz isto de maneira automática, carregando eventos e dependendo da dimensão do projeto, realmente deixa a memória do lado cliente sobrecarregada.
Existe um método chamado event delegation que permite anexar eventos somente necessários para o funcionamento dos novos eventos no dom carregado.
Este método é essencial para quem trabalha em um projeto Ajax maior.
Este é um post de compartilhamento sobre o assunto, e estejam abertos a comentar.
Diego Carrion comentou:
23rd Novembro, 2007 às 8:46 am
Alexandre, e o jQuery quem deveria ser culpado, não o JavaScript.
Eu utilizo bastante o Dojo e com ele não acontecem esses problemas.
admin comentou:
25th Novembro, 2007 às 2:50 pm
Bem, andei pesquisando várias frameworks e o próprio artigo deste post falam sobre o uso de event delegation em um projeto de navegação em ajax e a única framework que possui este uso no próprio core da framework é o Yahoo UI. Você já tentou carregar uma página em ajax e com um link dentro dela que também atualiza um dom via httprequest? Não sei como o DOJO funciona e se puder compartilhar com a gente como ele trabalha com o Ajax seria ótimo… abraços e sucesso…
Daniel Ribeiro comentou:
30th Novembro, 2007 às 10:57 am
Olá alexandre, estou iniciando em jquery agora, mas já estou terminando um sistema com js todo jquery, e estou com um problema no plugin clipregion http://amountaintop.com/sandbox/clipregion/,
o único que funcionou para o que eu queriae consegui adaptar, mas estou com uma problema de instancia, preciso que funcione em mais de um lugar na pagina independente, e não sei fazer essa alteração sem estragar o plugin, se puder dar uma dica agradeceria muito….
Agradeço desde já a atenção!
Joao comentou:
10th Dezembro, 2007 às 10:10 pm
Ajax é uma tecnologia relativamente nova e deve demorar um pouco mais para que tudo funcione corretamente para todos.
Alexsandro comentou:
23rd Junho, 2008 às 2:49 pm
é problema do httprequest e do JS e do browser sim.. o cado do DOJO pode ser que eles cuidaram deste problema no proprio core do DOJO. nada mais que isto…
mas uma vez, isto é tanto problema do browser com o JS e httprequest pois como sabemos a cada Ajax o body do HTML é modificado e quand o gente pedisse pra ver o source code dever aparecer o atual atual e não o primeiro source.
não diria que isto seja um bug, eu diria que isto é nada mais que o fluxo normal.
Os seguintes campos estão incorretos ou faltando