Innerhalb einer $ .getJSON-Erfolgsfunktion trigger ich zuerst das Click-Ereignis eines anderen Elements:
%Vor%Das ausgelöste Klickereignis hat seine eigene $ .getJSON-Methode, um eine Menge Daten in divs zu laden. Die nächste Zeile nach dem ausgelösten Ereignis:
%Vor%Am Anfang schien die $ .each nichts zu tun, aber ich habe direkt nach dem ausgelösten Ereignis eine Warnung hinzugefügt. Nach dem Beantworten der Warnung zeigt der Code in $ .each, was er tun soll.
Ich rate, dass $ .each ausgeführt wird, bevor das Klickereignis das Laden der Daten beendet.
setTimeout pausiert lange genug, damit das click-Ereignis Daten laden kann, aber ich möchte keine willkürliche Zeit einstellen:
%Vor%Ich habe auch $ .when und $ .then vergeblich versucht (obwohl das Hinzufügen von Alerts vor $ .eines in $ .dann eine Verzögerung verursacht, damit $ .each funktioniert):
%Vor%Aufgeräumt für mehr Klarheit
.trigger()
gibt ein jQuery-Objekt zurück, so dass Ihnen die Option $.when() ... $.then()
nicht möglich ist.
Andererseits wird .triggerHandler()
, ein Objekt Ihrer Wahl zurückgeben, was es ermöglicht, den verzögerten Trick auszuführen.
Ihr Code ist in drei Funktionen unterteilt, die im Folgenden vereinfacht werden. Der Aufrufpfad ist 1,2,3 und der wichtige Rückweg ist 3,2,1.
(1) Die Funktion der höchsten Ebene (JSON-Erfolg) enthält die folgenden Zeilen:
%Vor%(2) Der Click-Handler, der von (1) ausgelöst wird, lautet wie folgt:
%Vor%(3) Und die Funktion der niedrigsten Ebene, die den JSON enthält, von dem (1) abhängt, hat folgende allgemeine Form:
%Vor%Anmerkungen:
.when()
in (1) das Objekt jqXHR, das aus dem Aufruf .getJSON()
in (3) hervorgeht. Das verkettete .done()
in (1) wird somit gezwungen zu warten, bis das jqXHR aufgelöst ist (dh abgeschlossen ist), bevor die Funktion ausgelöst wird, die als ihr Argument bereitgestellt wird. .triggerHandler()
aufgerufen werden, kann dem Click-Handler zusätzliches Verhalten hinzugefügt werden, ohne die normale Klickaktion zu beeinflussen. GetModels()
direkt von (1) aus aufzurufen und den Mittelmann (2) auszuschneiden, was in Ordnung ist, wenn GetModels()
-Verhalten eindeutig gewünscht ist. Wenn (1) jedoch auf zukünftige Änderungen des ausgelösten Click-Handlers (2) reagieren muss, muss der obige Ansatz übernommen werden. Tags und Links jquery