2011-11-19 14 views
6

He leído la documentación de jQuery sobre el manejo de eventos, pero todavía no puedo entender qué debo hacer.En jQuery, ¿debería elegir live(), delegate() o on()?

Tengo una aplicación móvil donde el contenido está cargado con ajax, por lo que los eventos no pueden vincularse en el documento onLoad para ese contenido.

A medida que mi aplicación crece, ahora empiezo a preocuparme porque el manejo incorrecto de eventos puede ocasionar problemas de rendimiento.

¿Cuáles son las implicaciones en la elección del rendimiento entre on(), live() y delegate()?

¿Algo más a tener en cuenta?

Respuesta

6

De jQuery 1.7, el funcionario (y mas potente) manera de enlazar eventos es .on y .off . Es más rápido cuando se combina con un selector de id basado:

$('#id').on('click', myHandler); 

.on supercedes .live.delegate y .bind, ver aquí para más información:

http://blog.jquery.com/2011/11/03/jquery-1-7-released/

1

A partir de jQuery 1.7 del equipo de jQuery/API aconsejan que: está en desuso

[la] .live() método. Use .on() para adjuntar manejadores de eventos. Los usuarios de versiones anteriores de jQuery deben usar .delegate() en preferencia a .live().

Referencia: live() API reference, at: http://api.jquery.com/live/

Así que la elección, después de jQuery 1.7, está entre on() y delegate(); y la recomendación, arriba, parece sugerir que debe usar .on() con preferencia a delegate(). Aunque no puedo discutir sobre , ¿por qué?

+0

Así que no ven ninguna diferencia entre el() y delegar, excepto que el() se recomienda? –

+1

Honestamente, no; excepto que * siente * como si estuvieran ordenando jQuery, y la idea de '.on()' y '.off()' parece implicar que '.delegate()', ya que parece hacer mucho lo mismo que '.on()', probablemente se desaprovechará en el futuro. –

1

En caso de que usted está creando una aplicación Javascript para sí mismo o para su propio producto, usted debe usar jQuery 1.7 y .on() método.

En caso de que esté haciendo algún tipo de plugin, que puede ser utilizado en las versiones anteriores, usaría .delegate()