Tengo una vista parcial que se devuelve mediante una llamada Ajax con un tipo de datos html - dentro de este html hay una etiqueta ancla con un id , que estoy cableando un evento de clic usando la API de jQuery .on()
y la versión 1.7.1 del framework.Wiring up click event utilizando jQuery on() no se activa en HTML inyectado a través de la llamada Ajax
Por el bien de la brevedad, imaginar la vista parcial es el siguiente:
<div id="container" class="modal-dialog">
<h1>Heading</h1>
<a id="thelink" href="#">
<img src="<%:Url.Content("~/Path/To/Image.jpg")%>" /></a>
</div>
..y a través de un $.ajax
la POST estándar a una acción del controlador MVC que devuelve el anterior como resultado vista parcial, que interceptar y escupir en el diálogo modal.
El código de evento que estoy tratando de conectar un aspecto de la siguiente manera:
$(function() {
$("#thelink").on("click", function (e) {
e.preventDefault();
$("#jquery-ui-dialog-box").dialog("close");
});
});
Ahora, si me cambio la on()
a live()
- todo funciona como se esperaba. Sin embargo, con el código anterior en IE8 (modo Estándares IE8) el evento no se dispara, los puntos de interrupción no se activan, el modo de interfaz de usuario de jQuery no se cierra como en el ejemplo anterior. Sin embargo, con una llamada live()
, todo funciona como se esperaba.
Esta es la primera y única vez que he visto un diferencial entre el comportamiento de activación() y la desaprobado o 'enrollado' la unión de sucesos de API (delegado, en vivo, se unen)
que no tengo Problemas con volver a usar live()
o delegate()
pero me gustaría entender por qué ocurre esto, si eso es posible.
Regards SB
+1 - perfecto - Supuse ciegamente (erróneamente) que la 'firma' del cableado del evento sería la misma, pero no lo es. La integración de tu sugerencia funciona para mi código real. Aclamaciones. – SpaceBison
@Matt Si la aplicación tiene muchas pantallas y navegaciones, y vinculamos muchos manejadores de clics a $ (documento), el rendimiento podría verse afectado. no es así? – Samba
@Samba: Aunque es correcto, estás hablando de muchos, * muchos *, *** muchos *** antes de notar una degradación del rendimiento. No olvide que puede usar 'delegate()' o 'on()' para adjuntar elementos más cerca del elemento de destino, en lugar de adjuntarlo a 'document'. – Matt