Ich verwende die jQuery-Trigger-Methode, um ein Ereignis aufzurufen ... aber es verhält sich inkonsistent. Manchmal ruft es das Ereignis auf, manchmal nicht.jQuery benutzerdefinierte Ereignisse synchron auslösen?
<a href="#" onclick="
$(this).trigger('custom-event');
window.location.href = 'url';
return false;
">text</a>
Die hat viele Zuhörer hinzugefügt. Es ist, als wäre die Trigger-Methode nicht synchron, so dass die window.location.href
vor der Ausführung der Ereignisse geändert werden kann. Und wenn window.location.href geändert wird, findet eine Navigation statt, die alles unterbricht.
Wie kann ich Ereignisse synchron auslösen?
Verwenden von jQuery 1.8.1.
Danke!
EDIT
ich gefunden habe, dass das Ereignis, wenn hat einen Stack-Trace wie folgt aufgerufen:
- 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)
Dies beweist, dass jQuery
(Ich habe mich geirrt ... das beweist nur, dass das Ereignis, das ich anrief, eine Animation enthielt und die erwartete Funktion innerhalb des Callbacks nach der Animation aufruft)trigger
Verfahren asynchron ist.
+1: Ja! Das ist es ... danke! jQuery 'trigger'-Dokumente sagen nichts über dieses verzögerte Verhalten ... selbst wenn es nur eine kleine Verzögerung ist, kann es manchmal zu großen Problemen kommen. –
Tatsächlich lag ich falsch ... 'trigger' ist synchron ... Das Problem war, dass ein Effekt innerhalb des ausgelösten Ereignisses lief und die erwartete Methode innerhalb des Callbacks aufgerufen wurde. –
Der Handler muss ein Versprechen abgeben ;-) –