2011-12-08 10 views

Respuesta

43

Para elementos futuros dentro de #dataTable tbody, su código debería funcionar. Para delegar el clic de todo el camino hasta el documento, permitiendo que el mismo controlador para el futuro <tr> en cualquier lugar de la página, pruebe:

$(document).on("click", "tr", function(event){ 
    alert($(this).text()); 
}); 
+0

entonces, ¿qué estás diciendo es que el "encendido" también es para dom actual y futuro? –

+5

Sí, siempre que el elemento insertado esté dentro del elemento que vincula el evento. – David

+0

Exactamente lo que necesitaba. Te amo –

0

Usted tiene que usar jQuery DE .live() para futuros elementos

incorrecto, ya que esto es jQuery 1.7 (y yo era ayunar en la publicación de mi respuesta).

.on() funciona para todos los elementos (futuros).

+1

???? Im hablando de 1.7 + –

+1

Wrong. Esto es 1.7. – SLaks

+0

Está obsoleto en 1.7, en su lugar tiene ['.on()'] (http://api.jquery.com/on/) –

1

Esto manejará todos <tr> s, sin importar cuándo fueron creados, pero solo dentro del #dataTable tbody actualmente existente.
Es equivalente a .delegate.

+0

Así que hay ya no hay diferencia entre "ya en dom" vs "estará en dom"? –

+0

Todavía hay diferencias, pero delegate(), live() y on() pueden manejar ambos. – Stefan

+0

@Stefan desde 1.7 No debería volver a utilizar en vivo y delegar es como ... así que ya no hay diferencia ... ¿no? –

0

De api.jquery.com/on/

El .on() método concede controladores de eventos a la seleccionada actualmente fijado de elementos en el objeto jQuery. A partir de jQuery 1.7, el método .on() proporciona toda la funcionalidad necesaria para adjuntar manejadores de eventos. Para ayuda en la conversión desde métodos de evento jQuery más antiguos, consulte .bind(), .delegate() y .live(). Para eliminar eventos enlazados con .on(), vea .off(). Para adjuntar un evento que se ejecuta sólo una vez y luego elimina sí mismo, ver .one()

y desde api.jquery.com/live/

Como de jQuery 1.7, es obsoleto el método .live(). Utilice .on() para adjuntar controladores de eventos. Los usuarios de versiones anteriores de jQuery deben usar .delegate() con preferencia a .live().

3

Agregando a Davids respuesta aceptada, también se puede utilizar esta solución para enlazar varios eventos a un selector así como todos los elementos coincidentes futuros.

Por ejemplo, un elemento de entrada.

$(document).on({ 
    focus:function(){ 
     alert($(this).val()); 
    }, 
    blur: function(){ 
     alert($(this).val()); 
    } 
}, 'input[type=text]');