Sto utilizzando il metodo di trigger jQuery per chiamare un evento ... ma si comporta in modo incoerente. A volte chiama l'evento, a volte no.jQuery attiva l'evento personalizzato in modo sincrono?
<a href="#" onclick="
$(this).trigger('custom-event');
window.location.href = 'url';
return false;
">text</a>
Lo custom-event
ha molti ascoltatori aggiunti. È come se il metodo di trigger non fosse sincrono, permettendo di cambiare window.location.href
prima di eseguire gli eventi. E quando window.location.href viene modificato, si verifica una navigazione che interrompe tutto.
Come posso attivare gli eventi in modo sincrono?
Uso di jQuery 1.8.1.
Grazie!
EDIT
ho trovato che l'evento, quando viene chiamato ha una traccia dello stack come questo:
- jQuery.fx.tick (jquery-1.8.1.js: 9021)
- tick (jquery-1.8.1.js: 8499)
- jQuery.Callbacks.self.fireWith (jquery-1.8.1.js: 1082)
- jQuery.Callbacks.fire (jquery-1.8.1. js: 974)
- jQuery.speed.opt.complete (jquery-1.8.1.js: 8991)
- $ .customEvent (myfile.js: 28)
Questo dimostra che jQuery metodo
(mi sbagliavo ... questo dimostra che l'evento che stavo chiamando aveva un'animazione al suo interno e chiamava la funzione prevista all'interno del callback dopo l'animazione)trigger
è asincrona.
+1: Sì! Ecco ... grazie! I documenti jQuery 'trigger' non dicono nulla su questo comportamento differito ... anche se è solo un piccolo ritardo, a volte possono causare grossi problemi. –
In realtà ho sbagliato ... 'trigger' è sincrono ... il problema era che c'era un effetto in esecuzione all'interno dell'evento innescato, e il metodo previsto veniva chiamato all'interno del callback. –
Il gestore deve restituire una promessa ;-) –