2012-04-30 5 views
1

次のコードはドキュメントの準備ができていませんか?jQueryで.liveが動作する方法について混乱しています

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

このコードは、最後のbodyタグのすぐ上にあります。

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

答えて

3

私は通常、実際の要素ではなく、今後要素を埋め込むことになっていた収容ブロックに.liveを使用しないと思っていました。

これは代理人が行うことです。しかし、ライブイベントは非常に似ています。単にドキュメント自体を「包含ブロック」として使用します。これには、jQueryがすべてのイベントをページ上で確認する必要があるという欠点があります。だから、可能な場合は常にデリゲートを使用し(通常はそれが可能です!)


しかし、jQueryの1.7以来、様々なイベント登録メソッドは、引数に応じて、定期的なイベントや代表者の両方を登録する.on()に統一されている必要があります。ライブイベントの場合は、documentにデリゲートを作成するだけです。ここで

ライブ/デリゲートのイベントを登録するには、古い/新しい方法のいくつかの例は、(彼らはちょうど.bind()と同じようにが、新しい関数名.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 
+0

デリゲートとしても 'live()'が 'document'を使用しているのは、それが遅い理由です。可能な限り、最も近い静的な親要素で' delegate'(jQuery 1.7+では 'on')を使うべきです。 –

0

liveメソッドの構文はちょっと混乱していて使いにくいです。そのため、これは、より柔軟な方法であるより柔軟性があり、最近では、on方法に組み込まれている理由である。

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

ので、イベントが実際に文書要素にフックアップされています

あなたのコードは同等です。

liveメソッドでは、収納ブロックの説明はできません。イベントを常にドキュメント要素にフックアップします。 delegateまたはonメソッドを使用して、イベントを包含要素にフックアップします。

関連する問題