Ответ 1
Вам нужно привязать обработчик к статическому элементу, а не к строкам, которые можно добавить динамически. Поэтому это должно быть:
$("#paginatedTable").on("click", ".test .toggleTest", function ...);
У меня есть ссылка jQuery, которая запускается в динамическом списке для каждой строки при нажатии гиперссылки.
Это работает до того, как применяются данные, но как только datatables применяется к 11-й строке (после изменения отображения выше 10 по умолчанию) или на другой странице, jQuery больше не вызывается.
Я попытался бросить это в jsFiddle, и он работает там, поэтому я не могу воспроизвести его в jsFiddle по какой-то причине.
Любые указатели в правильном направлении были бы очень оценены.
echo "<table id='paginatedTable'>";
echo "<thead><th>Test1</th><th>Test2</th></thead><tbody>";
foreach($array as $arr){
echo "<tr><td>" . $arr['test1'] . "</td><td><div class='test'>";
echo "<a href='#' class='toggleTest' data-id='". $arr['id']."' id='test-" . $arr['id'] . "'>" . $arr['test2'] . "</a>";
echo "</div></td></tr>";
}
echo "</tbody></table>";
$(function(){
$('.test').on('click', '.toggleTest', function(e){
var id = $(this).data('id');
$("#test-"+id).html("Done");
return false;
});
});
$(document).ready(function() {
$('#paginatedTable').dataTable();
} );
Вам нужно привязать обработчик к статическому элементу, а не к строкам, которые можно добавить динамически. Поэтому это должно быть:
$("#paginatedTable").on("click", ".test .toggleTest", function ...);
Другим простым решением, которое я просто нашел, является просто добавление функции, которая использует обработчик компонента для обновления DOM при перерисовке DataTables.
Может использоваться как:
$(document).ready(function(){
var table = #('#table-1').DataTable({
"fnDrawCallback": function( oSettings ) {
componentHandler.upgradeDOM();
}
});
});
Он решил проблемы с разбивкой по страницам, когда я использовал раскрывающийся список в одном из столбцов.
Здесь есть несколько вещей, которые могут пойти не так:
$('#paginatedTable').on('click', '.toggleTest', function(e){
htmlspecialchars($arr['test2'])
$arr['test2']
, может применяться и к другим переменным)Я последовал за ответом @Barmar.
вместе с тем, я обернул клик в функцию document.ready, затем он работал у меня.
$(document).ready(function() {
$('#dmtable tbody').on( 'click', 'tr td.details-control', function () {
}
} );