可点击行仅适用于数据表中的第一页

sop*_*opi 5 javascript checkbox jquery datatables twitter-bootstrap

我需要帮助。我有一个页面显示引导数据表中的记录。每页显示 10 行记录,每行左列都有一个复选框。我想要做的是,当用户单击该行时,它将检查复选框并启用放置在表后面的按钮(用户必须至少选择一个复选框才能激活/启用该按钮)。我已经实现了这个,但不幸的是它只适用于第一页。当用户转到第二页并单击表格行时,不会选中该复选框。有人可以帮助我吗?我非常感激。

//disable button when no records are selected
var checkboxes = $("input[type='checkbox']");
var btn = $("#button");
btn.attr("disabled","disabled");

checkboxes.on('click', function(event) {
    if($(this).prop('checked')){
        btn.removeAttr('disabled');
    } else {
        btn.attr("disabled",!checkboxes.is(":checked"));
    }
});

//this will check the checkbox whenever user clicks the table row
$('.clickable-row').click(function (event) {
    if (event.target.type !== 'checkbox') {
        $(':checkbox', this).trigger('click');
    }
}); 
Run Code Online (Sandbox Code Playgroud)

Del*_*D0D 4

当您将 DataTables 与 jQuery 结合使用时,该插件会在您切换页面时通过在 DOM 中添加和删除元素来管理页面上显示的行。当表加载时,DOM 中存在的唯一行是出现在第一页上的行。

这意味着您的处理程序仅添加到第一页的元素中,一旦切换页面,这些元素就会被删除,因此当您返回到第 1 页时,这些元素将是新创建的元素,没有附加处理程序。

将您的代码更改为:

$('#some-table-id').on('click','.clickable-row', function (event) {
    if (event.target.type !== 'checkbox') {
        $(':checkbox', this).trigger('click');
    }
}); 
Run Code Online (Sandbox Code Playgroud)

这称为事件委托

另请参阅动态创建的元素上的事件绑定?