2010-12-02 7 views
0

これはおそらくイベントの仕組みについての私の知らないものですが、その機能の中にカスタムJQueryイベントは、1つの場所で実行されますが、別の場所では実行されません。

次作品(カスタムイベントが発生します):

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

私は実際には、機能の上部で右に発射したいと思っています。どんな助けでも大歓迎です!

注:これは、ブラウザ間で、また余分なデータ引数がある場合とない場合の同じ問題です。

+0

エンドがクリッピングされました:...ブラウザ間で同じ問題が発生し、余分なデータ引数があるかどうか。 – glortho

+1

'foo()'を呼び出した後にハンドラ*をバインドすることはできますか? – sje397

答えて

1

非同期コールバックで動作するという事実は、私がfoo();実際のバインドは行われていません。あなたはこれを行うときに、物事の順序に注意する必要があります。

jwwishartさんの答えはおそらく彼が最初にバインドしているために働いています...そしてfooを呼び出します。あなたがデバッグするのが簡単かもしれないが、何かが起こる順序でコード全体を投稿すれば。

+0

はい。とても簡単。私はバインディングがinitにあると思ったが、それは非同期コールバックの中のどこかにあった。私は同じ機能のコールバックの内外に移動したときに一貫して機能した/破ったという事実によって捨てられました。愚かな私!あなたとsje397と時間を割いた他の人に感謝します。 – glortho

0

次の作品は...?

私だけでも「カスタム」を結合すると、私は(できるだけ簡単に物事を取得する。)他の二つを取り出し

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


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

foo(); 
1

data 2番目の(非稼働)方式で未定義ているように見えます。

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

+0

申し訳ありませんが、私は元のコードにもっと忠実であったはずです。データは常にトリガーの前に定義されます。しかし、私は一緒にすべてのデータパラメータを削除すると同じ問題があります。 – glortho

+0

良い点。私はそれを見ましたが、私は自分の問題ではないと思うような簡単なコードを手に入れることに集中しました。 – jwwishart

関連する問題