0

重複の可能性:
動的に作成された要素のイベントバインディング?

ifステートメントを介していくつかのリンクを追加します。これは次のようになります。

if(jQuery.inArray(keywords[i].toLowerCase(), wordFilter) == -1) {
    $('p.suggestions').append('<a href="#" class="suggestion">' + keywords[i] + "</a> ");
}

リンクが正しく追加されます。私は次のような提案クラスですべてのリンクのクリックを登録します:

$('p.suggestions a').click(function(e) {
    e.preventDefault();
    t.add($(this).text());
});

htmlファイルにリンクをハードコーディングし、クリックが登録されてt.add()が実行された場合、正常に機能しました。ただし、リンクがifステートメントで追加されると、機能しなくなります。誰かがこれがどうやって来るのか手がかりを得ましたか?

4

4 に答える 4

2

jQuery を使用する

$(document).on('click','p.suggestions a',function(e) {
    e.preventDefault();
    t.add($(this).text());
});
于 2012-12-29T14:53:23.423 に答える
1

「ライブ」でバインドする必要がありますon

$(document).on( 'click', 'p.suggestions a', function(e) {
    e.preventDefault();
    t.add($(this).text());
});

のみを介してバインドするclick場合、ハンドラーは選択されたすべての (つまり、既存のすべての要素) 要素にバインドされます。新しい要素が発生した場合、それはハンドラについて何も知りません。いわゆる「ライブ」バインディングを使用すると、特別なセレクターをリッスンすることで、現在存在しない要素にハンドラーをバインドすることもできます。

于 2012-12-29T14:53:51.363 に答える
1

要素を動的に追加する場合は、イベントを jQuery のon-> http://api.jquery.com/on/にバインドする方が適切です。

以前はlivedelegateが推奨されていましたが、今onはお勧めです。

于 2012-12-29T14:53:56.800 に答える
0

動的コンテンツの使用 on() 関数 Jquery! live() と delegate() は非推奨です

$(document).on('click','p.suggestions a',function(e) {
    e.preventDefault();
    t.add($(this).text());
});
于 2012-12-29T14:53:53.547 に答える