2011-08-05 11 views
2

テーブルに行を作成するJQueryの部分があり、セルの1つにクラスに囲まれたXがあります。動的に作成され、クリックリスナーでクリックされたときに発生しません。 ここにコードがあります。Jqueryは動的にリンクを作成します

$('#add').click(function() { 
    $('#table').append('<td class="x">X</td></tr>'); 
}); 
$('.x').click(function() { 
    alert('Fired'); 
}); 
+0

新しい行の先頭に「TR」を追加していません。 –

答えて

4

あなたのイベントハンドラを登録するとき<td>要素がまだ存在していないので、後でトリガされるハンドラのlive()またはdelegate()を使用する必要があります。ライブ

$(".x").live("click", function() { 
    alert("Fired"); 
}); 
0
$(".x").live("click", function() 
{ 
    alert("Fired"); 
}); 

イベントを追加DOMの後半に追加されたものだけでなく、現在のところに追加されています。

0

代わりのこの

$('.x').live('click', function() { 
    alert('Fired'); 
}); 

$('.x').click(function() { 
    alert('Fired'); 
}); 

変更それはあなただコンテンツに.live機能を使用する必要があるクラスのx

0

で任意の作成した要素にクリック機能を結合し動的に生成される。

ので、あなたが最初に新しい.x要素を追加し、後で、(ゼロがおそらく存在している)すべての.xの要素にリスナーを作成している

$('.x').live('click',function() { 
0

$('.x').click(function() { 

を交換してください。

2つの解決策があります。一方が他方にはあなたのコードを書き換えることで、jQueryのliveを使用することです:代わりにclick

var xClickHandler = function() { 
    alert('Fired'); 
}; 
$('#add').click(function() { 
    $('#table').append(
     $('<td class="x">X</td></tr>').click(xClickHandler); 
    ); 
}); 
0

使用live

$('.x').live("click", function() { 
    alert('Fired'); 
}); 
0

あなたが追加されているHTMLがテーブルにはタイプミスがあります。あなたは手の込んだtrタグを見逃しています:

$('#add').click(function() { 
    $('#table').append('<tr><td class="x">X</td></tr>'); 
}); 
$('.x').click(function() { 
    alert('Fired'); 
}); 
関連する問題