2010-05-28 4 views
7

Panoramica del problemajQuery gestore di eventi in coda

In jQuery, l'ordine in cui si associa un gestore è l'ordine in cui verranno eseguiti se si sono vincolanti per lo stesso elemento.

Ad esempio:

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

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

Ma cosa succede se voglio il codice legato 2 al eseguito per primo?

.

mia soluzione attuale

Attualmente, la mia soluzione è quella di modificare la coda degli eventi:

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

.

Domanda

C'è qualcosa di potenzialmente sbagliato con la mia soluzione?

Posso tranquillamente utilizzare null come valore per il guid?

Grazie in anticipo.

.

risposta

1

C'è un plugin interessante chiamato eventstack. Ti consente di associare gli eventi alla parte superiore o inferiore della coda degli eventi. Non so quanto sia generale il tuo problema, o se stai cercando di invertire o ordinare arbitrariamente eventi nel tuo stack, ma il plugin potrebbe semplificare il tuo compito.

Se stai cercando di assemblare la tua coda in un ordine molto specifico, puoi provare l'approccio suggerito in this answer - creare eventi personalizzati che possono attivarsi a vicenda.

Il tuo approccio potrebbe essere il migliore per le tue esigenze, ma forse anche queste sono opzioni.

+0

Grazie. Dal momento che sto scrivendo un plugin, non voglio richiedere all'utente di attivare manualmente un evento personalizzato che ho fatto ogni volta. Voglio che sia automatico. Eventstack non aiuta neanche perché non voglio invertire lo stack, ma semplicemente posto l'evento del mio plugin all'inizio dello stack. – resopollution