2011-12-12 25 views
23

Sé que .live() está obsoleto pero parece que no puedo cambiarlo y mantener la funcionalidad.Jquery .on versus .live

Solo tengo una pregunta rápida acerca de la función .on() en jQuery. Actualmente estoy usando .live()here

así:

$('table tr th').live("click", function() { 
}); 

embargo, cuando intento y vuelva a colocar .live() con .on() ya no funciona como se supone que debe.

He intentado poner en

$('table tr th').on("click", function() { 
}); 

, así como

$('table tr').live("click", "th", function() { 
}); 

y

$('table tr').delegate("th", "click", function() { 
}); 

pero fue en vano.

¿Por qué esto y qué pasos puedo seguir para que funcione correctamente?

+1

posible duplicado de [jQuery 1.7 - Encendido directo() en el()] (http://stackoverflow.com/questions/8021436/jquery-1-7-turning-live- into-on) –

+0

@FelixKling Estoy tratando de evitar el uso de '$ (document)' para imitar la llamada exactamente.Me preguntaba si había otra forma de hacerlo que esté más en línea con los ejemplos en el sitio de la API de jQuery. –

+0

Simplemente tome el elemento existente más cercano (ancestro) (que correspondería más a '.delegate' luego). –

Respuesta

31

La función on() requiere una actualización sintáctica, debe modificar su código para:

$('body').on("click", "table tr th", function()... 

Lee este artículo para obtener más información: http://www.andismith.com/blog/2011/11/on-and-off/

+0

Muy cierto, actualizaré el contexto. –

0

De alguna manera supongo que está agregando tr elementos en su tabla, no th.

$('table').on("click", "tr th", function(){}); 
+0

Los '' s se generan a partir de una matriz y se escriben en el primer '' de la tabla. Su solución no funciona aunque ... –

+0

Eso no funcionará, su tabla se reemplaza usando '.replaceWith()' –

9

Prueba esto:

$('table tr th').live("click", function() { 

debería haber

$(document).on("click", "table tr th", function() { 

Así es como se imitaría la llamada .live exactamente. Por supuesto, puede limitar su selector de documento a algo más significativo en función de su estructura DOM.

Editar:

Solo para aclarar, en su ejemplo, usted está obligado a utilizar $(document).on(... porque la tabla no tiene ningún padres y es sustituido durante la vida de su página.

+0

Así que como estoy reemplazando la tabla en el código, necesito usar '$ (document)' para que la llamada sigue funcionando en todo momento? –

+0

@Andrew: No, cualquier elemento existente en la jerarquía servirá. –

+0

@FelixKling ¡Ah, bien, gracias! –

2

asegurar que el elemento seleccionado (el th/tr) existe cuando la página se carga inicialmente. El nuevo .on no funcionará si este selector se agrega más tarde al DOM.

Trate

$('body').on('click', 'thesSelectorForYourTriggerElement', function(){ 
    //callback 
});