51

重複の可能性:
jQuery 1.7 - live() を on() に変える

jQuery API ( http://api.jquery.com/on/ ) によると、関数「live」は推奨されていません。代わりに「on」を使用することをお勧めします。しかし、コードで「ライブ」を「オン」に置き換えると、jQuery は後で追加された要素を見つけることができなくなります。

これは機能します(ただし非推奨です):

$('li.bibeintrag').live('click', function(){
alert('myattribute =' + $(this).attr('myattribute'));
});

これは、「on」の API の例です。

$("#dataTable tbody tr").on("click", function(event){
    alert($(this).text());
});

コードをこれに変更すると ('live' が 'on' に置き換えられます)、それは機能しなくなります (jQuery は、後で追加された要素 (たとえば、追加) を検出しません):

$('li.bibeintrag').on('click', function(){
alert('myattribute =' + $(this).attr('myattribute'));
});

私は何を間違っていますか?誰か助けてくれませんか?

4

3 に答える 3

66

の任意の親要素にイベントを追加する必要がありli.bibeintragます。

$('ul').on('click', "li.bibeintrag", function(){
    alert('myattribute =' + $(this).attr('myattribute'));
});
于 2012-05-15T15:47:53.260 に答える
35

スタイルを通して見ると、jQuery のライブは次の$.onようになります。

$(document).on("click", "li.bibeintrag", function(){

});

レベルでクリック イベントをリッスンしdocument、ターゲットが の 2 番目のパラメータと一致するかどうかを判断します$.on。あなたと私は自分でこれを行うことをお勧めしますが、ドキュメント レベルでリッスンするのではなく、要素自体をより近くでリッスンしたいと考えています (イベントが処理される前にあまり伝播する必要がないように)。

のクリックに応答しているのでli、そのアイテムの親のレベルでリッスンします。

$("ul#myList").on("click", "li.bibeintrag", function(){
  /* Respond */
});

の 2 番目のパラメーターを指定しないと、イベント ハンドラーは要素自体にバインドされることに注意してください。つまり、動的に追加された要素に反応する$.onの動作が得られません。$.live

于 2012-05-15T15:50:55.500 に答える
0

これはうまくいくはずです

$('ul').on('click','li.bibeintrag' function(){
  alert('myattribute =' + $(this).attr('myattribute'));
});
于 2012-05-15T15:51:25.490 に答える