Установите все флажки на всех страницах jQuery DataTable (обработка на стороне сервера) - PullRequest
0 голосов
/ 31 мая 2019

Я использую 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");
        });
    }
});

1 Ответ

1 голос
/ 31 мая 2019

У вас может быть глобальная переменная, в которой будет храниться информация о том, следует ли считать все записи проверенными или нет:

var allChecked = false;

Это значение можно переключить с помощью вашего флажка major (я использовал простой 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...