次の方法を使用して、ページにいくつかの要素を生成しました。例えば、
$("#button"+caption).click(function(){
var firstDisplay = '<div id="firstDisp'+caption+'"><ul>';
for(var i=0;i<parents.length;i++){
firstDisplay=firstDisplay+'<li class="fClick">'+parents[i]+'</li>';
}
firstDisplay=firstDisplay+'</ul></div>';
$(firstDisplay).dialog();
});
そして、私はそのように「fClass」のonclickイベントを作成すると:
$(".fClick").click(function(){
alert("hey!");
});
動作しません!ただし、.dialog()の直後に他の関数内にonclick関数を配置すると、機能します!この方法で多くの要素を作成しているため、すべてのonclickイベントを単一のメソッドに入れることはできません。これを回避する方法はありますか? .appendメソッドでも同じ問題が発生しています。
使用しているjQueryのバージョンに基づいて、.on
または.delegate
に変更します。
jQuery 1.7以降
$(document).on('click', '.fClick', function(){
alert("hey!");
});
古いjQueryバージョンの場合、デリゲートを使用します
$(document).delegate('.fClick', 'click', function(){
alert("hey!");
});
Vegaが言ったことは完全に機能しています。ヒントがあります:2行目に間違いがあると思います。レンダリングにidまたはclassを配置できないため、おそらくaddClassメソッドを使用できます。次に例を示します。
var content = "<div>Hello, World</div>";
$("div").after(content);
$("last:div").addClass("mydiv");
クラスが追加されますが、IDを追加できるかどうかはわかりません。
on
の代わりにclick
を使用します。
_$(".fClick").on('click',function(){
alert("hey!");
});
_
click
は、$('.fClick').click({...})
を呼び出したときに存在する_.fClick
_要素にクリックハンドラーを追加します。後で追加された新しい_.fClick
_要素には、クリックイベントがありません。ただし、on
を使用すると、後で追加された場合でも、すべての_.fClick
_要素にクリックハンドラーがあります。
詳細はこちら: http://api.jquery.com/on/
$(document).ready(function()を再度呼び出して、そこにコードを追加します。ドキュメントは再び読み取られ(更新され)、そこにコードを適用するだけです。