我有一个表,在数据表的帮助下对大量记录进行了分页。第一个标题列是全选复选框,每行都有自己的复选框。
我想在我的表格中使用以下功能:
1)用户可以在表格中导航并随机选择/取消选中复选框。
2)点击thead中的“全选”复选框应选中/取消选中所有当前可见的记录。
3)“全选”按钮应保持不同数据表页面的状态(选中/取消选中)。例如。 - 如果用户单击第1页上的全选并导航到下一页,则应取消选中全选复选框,再次单击该复选框将仅检查此页面中的所有行,而之前选中的复选框不受影响。
到目前为止,我有以下代码来处理支票选择:
$('#selectAllCheck').click(function(e) {
var chk = $(this).prop('checked');
var currentRows = $('#myTable tbody tr');
$.each(currentRows, function(){
$(this).find(':checkbox[name=statusCheckbox]').each(function(){
$(this).prop('checked', chk);
});
});
});
我知道_('tr', {"filter":"applied"});
函数,但它只返回所有行给我。我不知道为什么。
我已经使用上面的代码实现了(1)和(2),它工作正常。唯一的问题是不同页面上“全选”功能的行为。我抬头看着datatables.net但找不到与此有关的任何内容。
答案 0 :(得分:4)
这是我最终为我的要求实施的。虽然不完美,但这段代码很好地实现了数据表中的“全选”列。
$(document).ready(function() {
oTable = $('#mytable').dataTable({
"bJQueryUI" : true,
"sPaginationType" : "full_numbers",
"fnDrawCallback": function( settings ) {
//managing the "Select all" checkbox
// everytime the table is drawn, it checks if all the
//checkboxes are checked and if they are, then the select all
// checkbox in the table header is selected
var allChecked = true;
$('#mytable tbody tr').each(function() {
$(this).find(':checkbox[name=statusCheckbox]').each(function(){
if (!$(this).is(':checked')) {
allChecked = false;
}
});
});
$('#selectAllCheck').prop('checked', allChecked);
},
});
// This is to stop datatable to sort the column on checking the checkbox
$('thead').click(function(e){
if (e.target.type == 'checkbox') {
e.stopPropogation();
}
});
// Click handler for select all checkbox that checks the rows on current view only
$('#selectAllCheck').click(function(e) {
var chk = $(this).prop('checked');
var currentRows = $('#mytable tbody tr');
$.each(currentRows, function(){
$(this).find(':checkbox[name=statusCheckbox]').each(function(){
$(this).prop('checked', chk);
});
});
});
});
答案 1 :(得分:2)
我使用函数" fnGetNodes"所以代码是:
var table = $('#your-table-id ').DataTable();
jQuery('#your-table-id .group-checkable').change(function () {
var checked = jQuery(this).is(":checked");
jQuery( "input", table.fnGetNodes() ).each(function(){
if(checked)
{
$(this).attr("checked", true);
}
else
{
$(this).attr("checked", false);
}
})
});
其中.group-checkable是表头中的复选框,用于选择所有行
答案 2 :(得分:1)
您可以使用缺陷函数,将pageNumber和复选框状态保存在数组或其他内容中,然后选中或取消选中:
像这样:(关心,这不仅会在页面更改时触发)
$("#example").dataTable({
"fnDrawCallback": function( settings ) {
....
}
});
或宽度:
$("#example").on("page", function() {
...
});
我希望它有所帮助