4

JQuery の「on」と「live」が同じように動作しないシナリオがあります。おそらく誰かが理由を指摘することができます。プロジェクトで JQuery 1.7.2 を使用していますが、このビルドでは「ライブ」が「オン」に置き換えられています。リストページで次のコードを使用しています。基本的に、このページにはユーザーがクリックできるアルファベット順のバーがあり、その姓を持つすべてのクライアントが読み込まれます。リンクをajax経由で実行したいと思います。

コード:

$("a.listajax").on("click", function (e) {
    e.preventDefault();
    var url = $(this).attr("href");
    $("div.content").load(url + " div.content");
    return false;
});

ここでの問題は、最初にページを読み込んでリンクをクリックすると、すべてが正常に機能することです。ページは ajax 経由で読み込まれます。ただし、その後、すべてのリンクがバインディングを失い、リンクをクリックするとページ全体が読み込まれます。

「オン」を「ライブ」に置き換えたところ、その後のクリックでもリンクが完全に動作し始めました。

私は何が欠けていますか?

4

2 に答える 2

7

単純に に置き換えるわけではありませ.live.on

$("a.listajax").live('click', function(e))

以下と同等です。

$(document).on('click', 'a.listajax', function(e))

重要

.listajaxDOM から削除されないすべてのアンカーに共通の祖先がある場合は、代わりにそれ (可能な限り深いもの) を使用する必要がありdocumentます。これにより、パフォーマンスが向上します。

于 2012-06-13T03:17:11.643 に答える
1

それが の要点ですlive()。新しい DOM 要素が作成されると、それらを再バインドします。少し混乱する可能性があるため、jQuery のサイトには、このような同様の質問がたくさんあります。

jQuery docsによると、次のように使用live()します。

現在および将来において、現在のセレクターに一致するすべての要素のイベント ハンドラーをアタッチします。

「...将来」の部分が重要です。on() それがないからです

于 2012-06-13T03:15:41.910 に答える