Eu tenho um link, myLink
que deve inserir o conteúdo carregado com AJAX em um div
(appendedContainer) da minha página HTML. O problema é que o click
evento que vinculei com jQuery não está sendo executado no conteúdo recém-carregado que está inserido no appendedContainer. O click
evento é vinculado a elementos DOM que não são carregados com minha função AJAX.
O que devo alterar para que o evento seja encerrado?
Meu HTML:
<a class="LoadFromAjax" href="someurl">Load Ajax</a>
<div class="appendedContainer"></div>
Meu JavaScript:
$(".LoadFromAjax").on("click", function(event) {
event.preventDefault();
var url = $(this).attr("href"),
appendedContainer = $(".appendedContainer");
$.ajax({
url: url,
type : 'get',
complete : function( qXHR, textStatus ) {
if (textStatus === 'success') {
var data = qXHR.responseText
appendedContainer.hide();
appendedContainer.append(data);
appendedContainer.fadeIn();
}
}
});
});
$(".mylink").on("click", function(event) { alert("new link clicked!");});
O conteúdo a ser carregado:
<div>some content</div>
<a class="mylink" href="otherurl">Link</a>
javascript
jquery
html
ajax
jquery-events
confiar
fonte
fonte
.
para o seletor de classe.Respostas:
Use a delegação de eventos para elementos criados dinamicamente:
Isso realmente funciona, aqui está um exemplo em que anexei uma âncora com a classe em
.mylink
vez dedata
- http://jsfiddle.net/EFjzG/fonte
Se o conteúdo for anexado após .on () ser chamado, você precisará criar um evento delegado em um elemento pai do conteúdo carregado. Isso ocorre porque os manipuladores de eventos são associados quando .on () é chamado (ou seja, geralmente no carregamento da página). Se o elemento não existir quando .on () for chamado, o evento não será vinculado a ele!
Como os eventos se propagam pelo DOM, podemos resolver isso criando um evento delegado em um elemento pai (
.parent-element
no exemplo abaixo) que sabemos existir quando a página carrega. Veja como:Mais algumas leituras sobre o assunto:
fonte
on
menos sujeito a correspondências indesejadas.se sua pergunta for "como vincular eventos em conteúdo carregado em Ajax", você pode fazer assim:
então você não precisa colocar sua configuração em cada código Ajax
fonte
A partir do jQuery 1.7, o
.live()
método está obsoleto. Use.on()
para anexar manipuladores de eventos.Exemplo -
fonte
Para quem ainda está em busca de uma solução, a melhor forma é vincular o evento no próprio documento e não vincular com o evento "on ready". Por exemplo:
});
fonte
Se sua resposta ajax contém entradas de formulário html, por exemplo, isso seria ótimo:
fonte
use jQuery.live () em vez disso. Documentação aqui
por exemplo
fonte
.live()
está obsoleto e foi removido na última versão do jquery.Para ASP.NET, tente isto:
Isso parece funcionar no carregamento da página e no carregamento do painel de atualização
Encontre a discussão completa aqui .
fonte