Tengo un enlace, myLink
que debería insertar contenido cargado con AJAX en un div
(appendedContainer) de mi página HTML. El problema es que el click
evento que he vinculado con jQuery no se está ejecutando en el contenido recién cargado que se inserta en el contenedor adjunto. El click
evento está vinculado a elementos DOM que no están cargados con mi función AJAX.
¿Qué tengo que cambiar para que el evento quede vinculado?
Mi HTML:
<a class="LoadFromAjax" href="someurl">Load Ajax</a>
<div class="appendedContainer"></div>
Mi 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!");});
El contenido a cargar:
<div>some content</div>
<a class="mylink" href="otherurl">Link</a>
javascript
jquery
html
ajax
jquery-events
confile
fuente
fuente
.
el selector de clases.Respuestas:
Utilice la delegación de eventos para elementos creados dinámicamente:
Esto realmente funciona, aquí hay un ejemplo en el que agregué un ancla con la clase en
.mylink
lugar dedata
: http://jsfiddle.net/EFjzG/fuente
Si el contenido se agrega después de llamar a .on (), deberá crear un evento delegado en un elemento principal del contenido cargado. Esto se debe a que los controladores de eventos están vinculados cuando se llama a .on () (es decir, normalmente al cargar la página). Si el elemento no existe cuando se llama .on (), ¡el evento no estará vinculado a él!
Debido a que los eventos se propagan a través del DOM, podemos resolver esto creando un evento delegado en un elemento principal (
.parent-element
en el ejemplo siguiente) que sabemos que existe cuando se carga la página. Así es cómo:Algunas lecturas más sobre el tema:
fuente
on
menos propenso a coincidencias no deseadas.si su pregunta es "cómo vincular eventos en contenido cargado ajax", puede hacer esto:
por lo que no necesita colocar su configuración en cada código ajax
fuente
A partir de jQuery 1.7, el
.live()
método está obsoleto. Úselo.on()
para adjuntar controladores de eventos.Ejemplo -
fuente
Para aquellos que todavía están buscando una solución, la mejor manera de hacerlo es vincular el evento en el documento mismo y no vincularlo con el evento "listo". Por ejemplo:
});
fuente
Si su respuesta ajax contiene entradas de formulario html, por ejemplo, esto sería genial:
fuente
use jQuery.live () en su lugar. Documentación aquí
p.ej
fuente
.live()
está en desuso y se eliminó en la última versión de jquery.Para ASP.NET intente esto:
Esto parece funcionar al cargar la página y al cargar el panel de actualización
Encuentre la discusión completa aquí .
fuente