javascript - 选中 jQuery DataTable 所有页面的所有复选框(服务器端处理)

标签 javascript jquery datatables

我正在使用启用了服务器端处理的 jQuery DataTables,并且我面临着检查所有页面上的所有复选框的问题。以下是我的代码,请帮助我解决问题。 这仅适用于当前页面。

$(document).on("ifClicked","#selecAllRec",function(event){
    if(event.currentTarget.checked){
        proCustomerListTbl.api().column(0).nodes().to$().each(function(index){
            $(this).find('.proCustChk').iCheck("uncheck");
        });
    } else {
        proCustomerListTbl.api().column(0).nodes().to$().each(function(index){
            $(this).find('.proCustChk').iCheck("check");
        });
    }
});

最佳答案

您可能有全局变量来存储是否所有条目都应被视为已检查:

var allChecked = false;

该值可以通过您的主要复选框进行切换(我使用纯JS addEventListener() 而不是 jQuery .on()某些扩展选项):

document.getElementById('example').addEventListener('click', event => {
  if($(event.target).is('thead [type="checkbox"]')){
    allChecked = $(event.target).prop('checked');
    $('table').DataTable().draw(false);
    event.stopPropagation();
  }
}, true);

您可以根据 allChecked 当前值呈现行复选框:

  drawCallback: function(){
    $(this.api().column(0).header()).html('<input type="checkbox"></input>');
    [...$('#example [type="checkbox"]')].forEach(checkbox => $(checkbox).prop('checked', allChecked));
  }

无论如何,这都不允许您根据当前排序/过滤来标记当前数据行,但您可以使用allChecked变量来恢复该选择服务器端。

以下代码片段演示了该方法:

//mimic source data
const srcData = [
  {name: 'apple', cat: 'fruit'},
  {name: 'pear', cat: 'fruit'},
  {name: 'carrot', cat: 'vegie'},
  {name: 'cabbage', cat: 'vegie'},
  {name: 'potato', cat: 'vegie'}
];
//initialize global 'allChecked' variable
var allChecked = false;

//initialize datatables
$('table').DataTable({
  dom: 'tp',
  data: srcData,
  pageLength: 3,
  columns: [null, 'name', 'cat'].map(header => ({title: (header || ''), data: header})),
  columnDefs: [{
    targets: 0,
    render: () => `<input type="checkbox"></input>`
  }],
  drawCallback: function(){
    $(this.api().column(0).header()).html('<input type="checkbox"></input>');
    [...$('#example [type="checkbox"]')].forEach(checkbox => $(checkbox).prop('checked', allChecked));
  }
});

//header checkbox click handler
document.getElementById('example').addEventListener('click', event => {
  if($(event.target).is('thead [type="checkbox"]')){
    //assign global variable to current state
    allChecked = $(event.target).prop('checked');
    //trigger table re-draw
    $('table').DataTable().draw(false);
    //prevent click from propagation and swapping column ordering
    event.stopPropagation();
  }
}, true);
<!doctype html>
<html>
<head>
  <script type="application/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  <script type="application/javascript" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
</head>
<body>
  <table id="example"></table>
</body>
</html>

关于javascript - 选中 jQuery DataTable 所有页面的所有复选框(服务器端处理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56394690/

相关文章:

javascript - 标题按钮内的自定义功能 react native

javascript - 如何将图像存储在本地存储而不是路径中?

javascript - 如何正确地将ajax响应分配给动态添加的字段

javascript - 为什么 IE9 执行一些 JQuery 需要这么长时间?

javascript - 可变路由器参数a路由

javascript - 页面 Logo 的浏览器兼容性问题

php - Jquery 从数据库表自动建议

javascript - 在 JS 数组上使用 jquery 数据表执行一些 css

filter - 单击复选框时页面跳转到顶部

php - Laravel 数据表 - 一个 View 上的多个表