0

アンカー タグを含むリスト アイテムがあります。これはクリック時に X を実行しますが、これは問題ありません。ただし、jquery を介してオンザフライで新しいリスト項目を追加し、この新しいリスト項目内のアンカー タグをクリックすると、クリックは登録されません。以下のコード スニペット。

クリック時:

$('ul#foo li p a#delete').click(function(){ 

alert('hmm');
});

ajax 呼び出しの後に新しい要素を追加する:

onComplete: function(id, fileName, data){
            $('ul#foo').prepend(data.li);
        }

今、DOMが新しい要素を認識していないという事実に関係していると思いますか?

それで、グーグルで調べた後、誰もが「変更」で.live()を使用すると言っていることに気付きました

だから私は.live()を試しました:

$('ul#foo').live('change', function() {
    //something
});

それが私が立ち往生している場所です。以前に .live() を使用したことはありません。私は何かが欠けていますか、私はそれを間違っていますか? どんな助けでも大歓迎です。

クリックが新しいオンザフライ要素に登録されるのはどのようなものですか。

読んでくれてありがとう

4

3 に答える 3

1

あなたはlive正しい使い方をしていますが、私はあなたがイベントを望んでいないと思います'change'. 'click'代わりに使用する必要があります。また、セレクターを使用するのではなく、ul#foo元のセレクターに戻りたいと思うでしょうul#foo li p a#delete

何かのようなもの:

$('ul#foo li p a#delete').live('click', function(){ 

});

#idMilimetric が指摘したように、セレクターがセレクター タイプを使用しているため、これには独自の問題もあります。要素 ID はページ上で一意である必要があります。実際には、クリック イベント ハンドラーでキャッチするすべての要素に css クラスを割り当て、それに応じてセレクターを変更する必要があります。

代わりに、セレクターを に変更する<a href="#" id="delete">ことができます。<a href="#" class="delete">ul#foo li p a.delete

于 2011-04-13T19:50:07.800 に答える
1

jQuery delegate() が必要です。

http://api.jquery.com/delegate/

と同様に機能します.liveが、少し簡単であり.live、下位互換性のためにのみ保持されることをお勧めします。

于 2011-04-13T19:51:09.467 に答える
1

あなたが抱えている混乱は、実際にはセレクターにあります。jQuery を使用して適切なものを選択すると、残りはより簡単になります。わかりましたので、html は次のようになります。

<ul>
    <li><a class="someUniqueClassToTheseLinks" href="whatever"></a></li>
</ul>

jQuery を使用して li を追加すると、次のようになります。

<ul>
    <li><a class="someUniqueClassToTheseLinks" href="whatever"></a></li>
    <li><a class="someUniqueClassToTheseLinks" href="whateverElse"></a></li>
</ul>

これで、ライブ イベントの登録は次のようになります。

$('a.someUniqueClassToTheseLinks').live('click', function(event) {
    ...
});
于 2011-04-13T19:51:59.000 に答える