0

これはおそらく、イベントがどのように機能するかについての私自身の無知にすぎませんが、誰かがこれを説明できますか: カスタム イベントは関数の先頭では発生しませんが、その関数内のコールバックで発生します。

次のように動作します (カスタム イベントが発生します)。

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 ) {
    ...
});

私は本当にそれが関数の一番上で起動することを望んでいます。どんな助けでも大歓迎です!

注: これはブラウザー間で同じ問題であり、余分なデータ引数の有無にかかわらずです。

4

3 に答える 3

1

それが非同期コールバックで機能するという事実は、foo();のときそれを信じるように私を導きます。と呼ばれ、実際のバインディングは実行されていません。これを行うときは、物事の順序に注意する必要があります。

jwwishartの答えは、彼が最初にバインドしているため、おそらく機能します...次にfooを呼び出します。デバッグが簡単かもしれませんが、コード全体を発生した場所の順序で投稿するとします。

于 2010-12-02T00:17:58.770 に答える
1

data2番目の(機能していない)メソッドでは定義されていないようです。

を定義するdataと、期待どおりに動作します。

于 2010-12-02T00:13:25.110 に答える
0

次の作品は...?

「カスタム」のみをバインドし、他の 2 つを削除しました (できるだけ単純にするため)。

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


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

foo();
于 2010-12-02T00:13:00.890 に答える