Frage

Dies ist wahrscheinlich nur meine eigene Unwissenheit, wie die Ereignisse der Arbeit, aber kann jemand erklären diese. Ein benutzerdefiniertes Ereignis wird nicht ausgelöst, an der Spitze einer Funktion, wird aber innerhalb dieser Funktion in einem Callback-Feuer

Die folgenden Werke (das benutzerdefinierte Ereignis ausgelöst wird):

function foo() {

    $.ajax( ... , function() {
            $.event.trigger("custom" , data );
    });

}

foo();

Die folgende funktioniert nicht (das benutzerdefinierte Ereignis nicht ausgelöst):

function foo() {
    $.event.trigger("custom" , data );

    $.ajax( ... , function() {
            ...
    });

}

foo();

Die Veranstaltung verbindlich ist wie folgt:

$(document).bind("custom custom1 custom2" , function( event, data ) {
    ...
});

Ich will es wirklich direkt am Anfang der Funktion feuern. Jede Hilfe ist am meisten geschätzt!

. HINWEIS: Es ist das gleiche Problem in allen Browsern, und mit oder ohne zusätzliche Daten Argument

War es hilfreich?

Lösung

Die Tatsache, dass es in dem Asynchron-Rückruf führt mich arbeitet, zu glauben, dass, wenn foo (); genannt wird, hat sich die tatsächliche Bindung nicht stattgefunden. Sie müssen sich über die Ordnung der Dinge vorsichtig sein, wenn Sie dies tun.

jwwishart Antwort funktioniert wahrscheinlich, weil er zuerst Bindung ... dann foo aufruft. Wenn Sie den gesamten Code mit der Reihenfolge der Post, wo die Dinge passieren, obwohl es leichter zu debuggen sein könnte.

Andere Tipps

data erscheint in der zweiten (nicht in Betrieb) Methode nicht definiert werden.

Wenn ich data definieren, es funktioniert wie erwartet.

Die folgenden Werke ...?

ich nur die „custom“ selbst gebunden, entfernte ich die beiden anderen (um die Dinge so einfach wie möglich.)

$(document).bind("custom" , function( event, data ) {
    alert(data);
});


function foo() {
    $.event.trigger("custom" , "Works" );
}

foo();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top