28

次の方法を使用して、ページにいくつかの要素を生成しました。例えば、

$("#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!");
}); 

動作しません!ただし、onclick関数を他の関数内の.dialog()の直後に配置すると、機能します。この方法で多くの要素を作成しているため、すべてのonclickイベントを1つのメソッドに入れることはできません。これを回避する方法はありますか?.appendメソッドでも同じ問題が発生しています。

4

4 に答える 4

78

使用しているjQueryのバージョンに変更する.onか、それに.delegate基づいて変更します。

jQuery1.7以降以降

$(document).on('click', '.fClick', function(){ 
    alert("hey!");
}); 

古いjQueryバージョンの場合はデリゲートを使用します

$(document).delegate('.fClick', 'click', function(){
    alert("hey!");
}); 
于 2012-08-21T13:04:40.867 に答える
1

onの代わりに使用click

$(".fClick").on('click',function(){
  alert("hey!");
}); 

click.fClickを呼び出すときに存在する要素にクリックハンドラーを追加します$('.fClick').click({...})。後で追加された新しい.fClick要素には、クリックイベントはありません。ただし、を使用すると、後で追加された場合でもon、すべての.fClick要素にクリックハンドラがあります。
詳細はこちら: http ://api.jquery.com/on/

于 2012-08-21T13:04:31.390 に答える
0

$(document).ready(function()をもう一度呼び出して、そこにコードを追加します。ドキュメントが再度読み取られ(更新され)、そこにコードを適用するだけです。

于 2015-01-08T16:24:24.973 に答える
0

ベガが言ったことは完全に機能しています。ヒントがあります:2行目に間違いがあると思います。レンダリングにidまたはclassを入れることができないため、おそらくaddClassメソッドを使用できます。次に例を示します。

var content = "<div>Hello, World</div>";
$("div").after(content);
$("last:div").addClass("mydiv");

クラスは追加されますが、IDを追加できるかどうかはわかりません。

于 2015-03-26T16:20:45.223 に答える