0

jQuery を使用して、次のように古い .live() イベント バインディングを .on() に置き換えています。

$(document).on(event, selector, function () {
    console.log($(this)); //$(this) refers to the $(document) element, not the selector

});

私がやりたいことは、このイベントが適用されている要素にアクセスすることです。何か案は?

これは機能します:

$(selector).on(event, function () {
    console.log($(this)); //$(this) refers to the selector
});

ただし、ライブと同じようには機能しません。セレクターに一致するドキュメントに追加された新しい要素はバインドされません...

ありがとう!

4

3 に答える 3

0

ドキュメントによると、あなたの仮定は間違っています:

$("body").on("click", "p", function(){
  alert( $(this).text() );
});

このうち、「クリックされるたびに各段落のテキストを警告ボックスに表示する」と言われています。そのため、this参照はフィルタリングセレクターによって一致した要素への参照です。

オブジェクトをアラートnodeNameする例を設定することで、これを自分でテストできます。this

$("body").on("click", "p", function(){
  alert( this.nodeName ); // p
});

デモ: http://jsbin.com/eseduf/edit#javascript,html

フィルタ セレクタとして変数を使用していることに気付きました。この変数に値が設定されていることを確認してください。そうしないと、フィルタリング セレクターではなく、メイン セレクターがイベントをキャプチャーすることがわかります。

var selector;
$("body").on("click", selector, function(){
  alert( this.nodeName ); // body
});
于 2012-04-27T14:01:05.770 に答える
0

イベントが適用される「セレクター」を追加できます。ライブのようなことを行うには、次のようにします。

$(document).on("click", "a", function() { console.log($(this)); });

.delegate をエミュレートし、スコープをそれを含む要素に絞り込むことをお勧めします。

$("#containingElement").on("click", "a", function() { console.log($(this)); });
于 2012-04-27T14:02:21.090 に答える
0

このjsFiddleをチェックしてください... http://jsfiddle.net/nc9XD/1/

「on」メソッドは、新しい要素を取得します... on イベントをバインドした要素にそれらが追加されている限り。

また..「this」は、関数内でクリックされた要素を参照します。

于 2012-04-27T14:07:49.410 に答える