2011-12-18 15 views
5

Actualmente estoy trabajando en un sitio que tiene miles y miles de líneas de código jQuery, hay un montón de eventos de clics especialmente y me preguntaba si hay un mayor rendimiento- la mejor práctica consciente para eventos vinculantes de clics o cualquier evento a un elemento.¿Cuál es el mejor enfoque para vincular eventos jQuery a los elementos

Seguramente tener más de 30 eventos de clic en varios enlaces y elementos no puede ser bueno en cuanto a rendimiento se registra. Se está utilizando la nueva función jQuery 1.7 "on", ¿tal vez los eventos se vincularán al elemento del cuerpo o algo así y luego un cheque hará clic en el elemento y luego trabajará desde allí? ¿O no es un problema y vincula muchos eventos que en realidad no son un problema para un navegador o rendimiento moderno?

+0

Delegación de eventos, obviamente. Desea tener sus elementos de contenedor estáticos y, predominantemente, vincular los manejadores a esos elementos ... Por ejemplo, si tiene una barra de herramientas con botones, quiere un manejador de un clic en la barra de herramientas. –

+0

¿Qué tan único es cada evento al hacer clic? –

+0

Bueno, esto varía. Algunos de los eventos de clic son para carruseles, algunos son para mostrar popup modales, otros son para transmitir eventos a otros elementos. Entonces diría que cada evento es bastante único. –

Respuesta

5

Debería unir los elementos al elemento dom más bajo que contenga todos los elementos en los que se hace clic.

Así que si hay un div llamado foo que contiene cada elemento, que diría:

$("#foo").on("click", "yourselector", function(){ 
}); 

Si los elementos de su se distribuyen en cada pulgada de su página, entonces lo que escucha en el mismo arriba:

$(document).on("click", "yourselector", function(){ 
}); 

Si estoy entendiendo bien su pregunta, yo realmente espero que el desarrollador anterior no hizo algo como:

$("#someButtonId").on("click", function(){ 
    //this defeats the whole purpose of on!!! 
}); 
+0

Esta es siempre la forma en que pensé que debías hacerlo. Parece ser una cosa subjetiva sin embargo, definitivamente útil. No escribí la mayor parte del código, así que quiero arreglarlo y hacerlo más eficiente. Parece que vincular eventos de clic al contenedor de todos los elementos que desea vincular es el mejor enfoque. –

+0

Tristemente Adam, el desarrollador anterior vinculó clics usando elementos individuales como usted mencionó, es por eso que lo estoy reparando, es una pesadilla de rendimiento y sin mencionar que es un sitio de Magento que hace algunas cosas que no son de PC para su marcado. Llamadas a eventos en línea y otras cosas. –

+0

Estaba pensando en usar $ (document) .on ("click", "yourselector", function() {para el código debido a la singularidad de los elementos, pero no estaba seguro de si eso sería un mal rendimiento para una página hecha de muchos elementos. –

1

Puede vincular el mismo evento más de una vez en un elemento, pero si tiene hasta 30 eventos de clic en el mismo enlace, debe hacerlo de manera diferente. Coloque el código para todas las acciones diferentes que desea hacer en un único controlador de eventos en lugar de unir cada pequeña cosa por sí mismos.

Cuestiones relacionadas