Я прочитал несколько статей и jQuery
документацию по API и понимаю, что нет никакой разницы между click()
и on('click')
, кроме делегата события.
И я использую Datatables и его плагин выбора вмоя страница;Мой HTML-тег и скрипт идентичны следующему коду.
<div class='panel'>
<table class='data-table'>
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
</tr>
</thead>
<tbody>
<tr data-id='1'>
<td>Row 1, 1</td>
<td>Row 1, 2</td>
</td>
<tr data-id='2'>
<td>Row 2, 1</td>
<td>Row 2, 2</td>
</td>
<tr data-id='3'>
<td>Row 3, 1</td>
<td>Row 3, 2</td>
</td>
</tbody>
</table>
</div>
<script>
$('table tbody tr').click(function(){
console.log("Click(): " + $('table tr.selected').data('id'));
});
$('table').on('click', 'tbody tr', function() {
console.log("On(Click()): " + $('table tr.selected').data('id'));
});
</script>
, когда click()
и on('click')
совпадают, я должен получить одинаковые результаты консоли, но я получил после выбора первой строки (data-id=1
)
On(Click()): undefined
Click(): 1
затем при нажатии на вторую строку из первого
On(Click()): 1
Click(): 2
, то есть я вижу, что on('click()')
выполняется до процедуры выбора таблицы данных, а click()
выполняется после того же самого,Какое исправление можно применить, чтобы и click()
, и on(click())
выполнялись после процедуры выбора таблиц данных.
Поскольку набор данных в моей таблице огромен, мне нужно применить делегирование, т. е. on(click())
,
Обновление
с использованием this
в событиях даст доступ к выбранной строке, но повторное нажатие на ту же строку в таблице данных удалит выделение, поэтому результат должен быть undefined
дляобе функции.