ある場所でのカスタムjQueryイベントの発砲が別の場所ではありません
-
30-09-2019 - |
質問
これはおそらくイベントの仕組みについての私自身の無知ですが、誰かがこれを説明することができます。カスタムイベントは関数の上部で発射されませんが、その関数内のコールバックで発射されます。
次の作品(カスタムイベントが発射されます):
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();
所属していません StackOverflow