問題文:静的に作成され
たテーブルと、動的に作成されthead
た内部の 'tr/td' があります。tbody
私が達成しなければならないのは、ユーザーがテーブルのどこかをクリックしたときに、クリックされval()
た行の最初の列を取得する必要があるということです。
これをテストするon
ために、親要素クラス、つまり class for を使用してクリック イベントをバインドしていますtbody
。td:first
そして、クリックした行の最初の列のテキストを更新しようとしていますclicked
。
しかし、どういうわけかイベントはキャッチされていません。これはJSfiddleからの抜粋です。
HTML:
<table class="table" id="table-id">
<thead>
<tr class="table-header">
<th class="edit">Edit</th>
<th class="name">Name</th>
<th class="status">Status</th>
</tr>
</thead>
<tbody class="table-body" id="table-body-id">
</tbody>
</table>
テーブルの作成
var container = $('.table-body');
['A', 'B'].forEach(function(index){
$('<tr>', {class: 'table-row', id: 'table-row-id-'+index}).appendTo(container);
$('<td />', {class: 'edit', id: 'edit-id-'+index, value: index}).appendTo(container);
$('<td />', {class: 'name', id: 'name-id-'+index, text: 'Mr. '+index}).appendTo(container);
$('<td />', {class: 'status', id: 'status-'+index, text: 'MSc'}).appendTo(container);
$('</tr>').appendTo(container);
});
バインディングクリックイベント
$("#table-body-id").on("click", "tr", function(){
alert($(this).find('td:first').val());
$(this).find('td:first').text('clicked');
});
stack-overflow で多数のスレッドを調べた後、上記のコードを書きました。1 つの実用的な JS-Fiddle の例。
ただし、上記のコードでは機能しません。なぜ機能していないのか、どうすれば修正できるのか、どうにかして私に指摘していただけませんか?