2011-12-28 15 views
10

tengo un botón que se crea dinámicamente, así que necesito usar .live en mi código. He aquí un ejemplo:jquery on no funciona pero live usa 1.7.1 library

$('#send').live('click', function(){ 
..... 
..... code ..... 
..... 
}); 

estoy usando jQuery 1.7.1 y quería cambiarlo a usar .en pero no funciona. ¿Por qué es esto? Es la sintaxis diferente?

Miré la documentación y no parece estar haciendo nada mal. No me importa dejarlo como en vivo, pero me gustaría saber si estoy haciendo algo mal.

http://api.jquery.com/on/

+2

¿Aparece un error? ¿Lo que pasa? Es posible que desee publicar su código real. También puede usar Fiddler para ver si tiene problemas de descarga. – rboarman

Respuesta

19

¿Es la sintaxis diferente? Sí. ¿Leíste toda la página de doco .on() que vinculaste?

El siguiente resumen sobre cómo cambiar de .live() a .delegate() o .on() es desde el .live() doco page:

$(selector).live(events, data, handler);    // jQuery 1.3+ 
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ 
$(document).on(events, selector, data, handler);  // jQuery 1.7+ 

Así que en su caso de que quiera:

$(document).on('click', '#send', function(){ 
    // your code here 
}); 

Nota sin embargo que lo ideal es que ganó' t utilizando $(document), usará $(someotherelement) para conectar el controlador a un elemento más cercano a su elemento '#send'. Si puede, use el elemento padre directo de '#send', o si el padre también se crea dinámicamente, use como su padre.

+1

Y lo mejor de '.on()' (o '.delegate()') es que puede cambiar 'document' a cualquier' 'que desee. – Jasper

+0

sí, simplemente no entendí que tenía que usar dos selectores como Slaks –

+0

por ejemplo si está dentro de un formulario podría ser como $ ('$ customForm'). On ('clic', '#send', función () {})? –

6

Para utilizar delegación de eventos, requiere .on dos selectores, como .delegate.

$('some container').on('click', '#send', function() { ... });