2012-01-27 10 views
6

I piense que que los controladores de eventos se procesan en el orden en que están registrados. (¿Es eso correcto?) Si ese es el caso, entonces si adjuntaré un controlador de eventos al comienzo de mi script, ¿puedo estar absolutamente seguro de que se disparará antes que otros manejadores conectados al mismo evento? Además, ¿los espacios de nombres de eventos tienen algún efecto sobre esto? ¿Los controladores de eventos se disparan en serie (uno termina antes del siguiente) o en paralelo?Asegúrese de que la orden de ejecución del controlador de eventos jQuery

Quiero hacer esto porque mi script se basa en el tamaño de la ventana gráfica, que cambia en el evento de cambio de tamaño, y tengo que buscarlo constantemente. En lugar de llamar al $(window).width() repetidamente en cada una de las funciones de mi controlador, me gustaría poner un controlador en la parte superior de mi script que guarda $(window).width() en una propiedad del objeto en cada cambio de tamaño. Luego en los controladores posteriores puedo acceder a la propiedad y estar seguro de que es la medición más reciente.

Sé que podría crear un evento personalizado que se active tan pronto como se realice el cálculo y adjuntar controladores posteriores al evento personalizado. Pero no quisiera hacer eso porque necesito mantener la interoperabilidad con los complementos que vienen después del mío que también pueden estar vinculados al evento de cambio de tamaño.

+1

Consulte http://stackoverflow.com/questions/290254/how-to-order-events-bound-with-jquery – ustun

+0

¿Está perdiendo un rendimiento significativo en '$ (window) .width()'? Si no, ¿para qué molestarse? Simplemente estará introduciendo una dependencia frágil en el estado de una variable global. – millimoose

+0

@Inerdial Necesito llamarlo y algunos otros cálculos como 20 veces. Creo que marcará la diferencia. – ryanve

Respuesta

4

Si conecta su controlador de eventos antes de ejecutar cualquier otra secuencia de comandos (incluso solo un complemento), su devolución de llamada siempre se activará primero.

Puede inspeccionar el conjunto de controladores de eventos a través del objeto de datos:

$(window).data('events'); 

Nota: este es un enfoque no documentada y podría no funcionar con el tiempo. Úselo para inspección solamente.

+0

lo siento por el lado, ¿hay alguna manera de acceder a eso con Javascript puro? –

+3

@ AndréAlçadaPadez - No. No solo eso, esto solo te dará controladores de eventos que hayas adjuntado usando jQuery. –

+1

gracias, estoy teniendo un montón de problemas con los eventos de JavaScript :) –

Cuestiones relacionadas