2010-05-28 4 views
7

Vue d'ensemble du problèmegestionnaire d'événements jQuery file d'attente

En jQuery, l'ordre dans lequel vous liez un gestionnaire est l'ordre dans lequel ils seront exécutés si vous liez au même élément.

Par exemple:

$('#div1').bind('click',function(){ 
// code runs first 
}); 

$('#div1').bind('click',function(){ 
// code runs second 
}); 

Mais si je veux le 2 lié à un code exécuté en premier?

.

Ma solution actuelle

Actuellement, ma solution est de modifier la file d'attente:

$.data(domElement, 'events')['click'].unshift({ 
          type : 'click', 
          guid : null, 
          namespace : "", 
          data : undefined, 
          handler: function() { 
           // code 
          } 
         }); 

.

Question

Y at-il potentiellement mal avec ma solution? Puis-je utiliser sans risque null comme valeur pour le guid?

Merci d'avance.

.

Répondre

1

Il existe un plugin intéressant appelé eventstack. Il vous permet de lier des événements au début ou à la fin de la file d'attente d'événements. Je ne sais pas à quel point votre problème est général, ou si vous cherchez à inverser ou à ordonner arbitrairement des événements dans votre pile, mais le plugin peut simplifier votre tâche.

Si vous souhaitez assembler votre file d'attente dans un ordre très précis, vous pouvez essayer l'approche suggérée dans this answer - créer des événements personnalisés qui peuvent se déclencher l'un l'autre. Votre approche peut être la meilleure pour vos besoins, mais ce sont peut-être aussi des options.

+0

Merci. Depuis que j'écris un plugin, je ne veux pas obliger l'utilisateur à déclencher manuellement un événement personnalisé que j'ai fait à chaque fois. Je veux que ce soit automatique. Eventstack n'aide pas non plus parce que je ne veux pas inverser la pile, mais simplement placer l'événement de mon plugin au début de la pile. – resopollution