質問

これはおそらくイベントの仕組みについての私自身の無知ですが、誰かがこれを説明することができます。カスタムイベントは関数の上部で発射されませんが、その関数内のコールバックで発射されます。

次の作品(カスタムイベントが発射されます):

function foo() {

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

}

foo();

以下は機能しません(カスタムイベントでは発生しません):

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

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

}

foo();

イベントバインディングは次のとおりです。

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

私は本当にそれが関数の上部ですぐに発射したいです。どんな助けも感謝しています!

注:それはブラウザ全体で同じ問題であり、追加のデータ引数の有無にかかわらず。

役に立ちましたか?

解決

それが非同期コールバックで機能するという事実は、foo();呼ばれると、実際の結合は行われていません。これを行うときは、物事の順序に注意する必要があります。

Jwwishartの答えは、おそらく彼が最初に拘束されているので、おそらく機能します...次にFooに電話します。コード全体を、デバッグが簡単かもしれませんが、どこで発生するかという順序で投稿する場合。

他のヒント

data 2番目の(非動作)方法で未定義のように見えます。

定義するとき data, 、それは期待どおりに機能します。

次の作品...?

「カスタム」だけを縛りましたが、他の2つを削除しました(可能な限りシンプルなものを得るために)。

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


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

foo();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top