click
ページの読み込み後に作成されるものを含め、jQueryのイベントをクラスのすべてのインスタンスにバインドしようとしています。
次のコンポーネントがあります。
HTML
<table id='draft-board'>
<tbody>
<tr id='1'>
<td class='x'><img src='images/x.png' /></td>
<td class='check available'><img src='images/checkmark.png' /></td>
<td class='rank'>1</td>
<td class='player'>Last, First</td>
</tr>
. . .
Javascript
/*** this one works fine ***/
$('#draft-board tbody tr').on('click', 'td.x', function() {
//do something...
$(this).addClass('undo').removeClass('x');
});
/*** this one doesn't get triggered ***/
$('draft-board tbody tr').on('click', 'td.undo', function() {
console.log('clicked undo');
//do something else...
$(this).addClass('x').removeClass('undo');
});
ご覧のとおり、ユーザーが class を含む表のセルをクリックするとx
、 I が適用され、次に classと class がdo something
交換されます。この部分は正常に動作します。x
undo
動作しない部分は 2 番目のブロックでdo something else
、ユーザーが class でテーブル セルをクリックしたときに実行しようとしますundo
。ご覧のとおり、「クリックされた元に戻す」をそのブロック内のコンソールに記録して、on('click'...)
イベントが発生しているかどうかを確認しようとしていますが、そうではありません。
私の理解では、jQuery で減価償却された関数を複製する新しい方法は、親要素live()
を呼び出し.on()
てから、メソッドのパラメーターで対象の子要素を渡すことでした。
undo
ただし、明らかに、ページが既にロードされた後にクラスが追加された表のセルは、その.on()
イベントがそれらにバインドされていません。
考え?ありがとうございました。