1

ドキュメント内にない次のコードを用意していますか?

$('a[href^="content/"]').live('click', function(event)
{
    event.preventDefault();
    ....

このコードは、終了本体タグのすぐ上にあります。

HTMLの本文に一致するhrefを持つアドレスリンクが含まれている場合、このコードの実行時にまだDOMに含まれていない場合でも、クリックが付加されますか?.liveがどのように機能するかについて少し混乱しています。通常、実際の要素ではなく、将来要素で埋める予定の包含ブロックで.liveを使用すると思いました。

4

2 に答える 2

3

通常、実際の要素ではなく、将来要素で埋めようとしている包含​​ブロックで .live を使用すると思いました。

これは代表者が行うことです。ただし、ライブ イベントは非常に似ています。ドキュメント自体を「包含ブロック」として使用するだけです。これには、ページで発生する特定のタイプのすべてのイベントをjQuery がチェックしなければならないという欠点があります。したがって、可能であれば常にデリゲートを使用する必要があります (通常は可能です!)


ただし、jQuery 1.7 以降、さまざまなイベント登録メソッドが統合さ.on()れ、引数に応じて通常のイベントとデリゲートの両方が登録されます。documentライブ イベントの場合は、代わりにデリゲートを作成するだけです。

ライブ/デリゲート イベントを登録する古い/新しい方法の例をいくつか示します (通常の方法は、通常の方法と同じです.bind()が、新しい関数 name と同様であるため省略します.on())。

// live events
$('.foo').live('click', function(e) {}); // old
$(document).on('click', '.foo', function(e) {}); // new

// delegates
$('#container').delegate('.foo', 'click', function(e) {}); // old
$('#container').on('click', '.foo', function(e) {}); // new
于 2012-04-30T08:38:32.587 に答える
0

メソッドの構文はlive少しわかりにくく、使いにくいです。そのため、より柔軟なdelegate方法に置き換えられ、最近では方法にも組み込まれていonます。

あなたのコードは以下と同等です:

$(document).delegate('a[href^="content/"]', 'click', function(event) { ...

したがって、イベントは実際にはドキュメント要素に接続されています。

包含ブロックで説明していることは、メソッドでは実行できませんlive。イベントは常にドキュメント要素に接続されます。delegateまたはメソッドを使用しonて、イベントを包含要素にフックします。

于 2012-04-30T08:58:06.137 に答える