2012-02-01 7 views
0

私はthis oneに似た質問がありますが、しかし、一つの重要な違いがあります。受け入れられた回答で提供されるメソッドは、「直接」バインドされたイベントで正しく機能します。ハンドラにdelegateメソッドが割り当てられている場合、結果は生成されません。たとえば:テスト()メソッド

クラス some-classを持つ要素の後
$("#some-element").delegate(".some-class", "click", function() { 
    alert("Click!"); 
}); 

が生成されたHTMLに挿入し、clickイベントハンドラがそれらにバインドされているかどうかをテストする方法はありますか?

EDIT:ハンドラは.some-classにバインドされないので、先のとがっさんのコメント@ 1として、私は、上記の質問を訂正します:

要素ならば、たとえば、表現、チェックする方法はあります、jQueryオブジェクト(この例では$(".some-class")とすることができます)をクリックすると、ハンドラがトリガされますか?

+3

「クリック」イベントハンドラは、* *これらの要素にバインドされていません。それは "#some-element"に束縛されていて、それはDOMが変わるだけで変化しません。イベントはDOM( "バブル")を伝播し、 "#some-element"にバインドされたハンドラは、まずイベントターゲットに "some-class"クラスがあることを確認します。そうであれば、ハンドラが呼び出されます。 – Pointy

+0

私は理解します。それを知っている - 私は質問で言及した振る舞いをシミュレートする方法はありますか?より具体的になるように修正します – Przemek

+0

これを確認するための準備ができているjQueryのメカニズムはないと思います。 jQueryが ".delegate()"のイベント修飾子情報をどこに格納しているのかわかっていれば、あなたが書き込めると思います。ハンドラがどのように設定されているかを記録しておくほうが簡単なようです。 – Pointy

答えて

1

Pointyで指摘されているように、イベントはバブルアップし、ルート要素にバインドされた単一の「マスター」イベントハンドラがあり、クリックを最初に受け取った要素が指定したクラスを持っているかどうかを確認します。呼び出される。

だから、チェックするためにあなたのコールバックは、要素上で呼ばれるように起こっている場合は、あなたがしなければならない、すべての要素がリストにだから、セレクタ$("#some-element .some-class");

することにより、このような動作するはずです(避難所」を提供しているかどうかを確認することですテスト済み):

var testEl = elementYouWantToTestAgainst; 
if ($("#some-element .some-class").is(testEl)) { 
    //It is "bound" 
} 

または同じことをする別の解決策。

//Which should do something like this: 
var els = $("#some-element .some-class"); 
els.each(function() { 
    if (this === testEl) { 
     //It is "bound" 
    } 
}); 

デバッグイベントに関しては、通常、ハンドラにconsole.log("Event fubar fired!");を追加するだけです。

+0

\ @Maiku: 'is()'メソッドを使って簡単に行うことができます。 '場合($は、(「#いくつかの要素.someクラスは」)。です(elementYouWantToTestAgainst))' – Matt

+0

自分のアプリケーションに 'click'イベントをトリガしようとしたとき、私はいくつかの問題を持っていると私はデバッグ目的のためにそれを必要とします。ヒントをありがとう、私はそれを試してみましょう。 – Przemek

+0

@マット、ありがとう、私はちょうどそのようなものがあるかどうかを確認するためにドキュメントを閲覧していた。私は最近多くのjQueryを使用していません。 –

関連する問題