JQuery Datatables флажок получить все проверенные строки

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

var tbl;
$(document).ready(function (){
          tbl = $('#example').DataTable({
            columnDefs: [{
                targets: 0,
                data: 2,
                'checkboxes': {
                    'selectRow': true
                }
            },
            { "visible": false, "targets": 1 }],
            select: {
                style: 'multi'
            },
            order: [[1, 'asc']],
            iDisplayLength: 10,
            drawCallback: function () {
                var api = this.api();
                var rows = api.rows({ page: 'current' }).nodes();
                var last = null;

                api.column(1, { page: 'current' }).data().each(function (group, i) {
                    if (last !== group) {
                        $(rows).eq(i).before(
                            '<tr class="group"><td colspan="6">' + group + '</td></tr>'
                        );
                        last = group;
                    }
                });
            }
        });
});

function getSelected(){
    alert(tbl.columns().checkboxes.selected().length);
}

У меня есть код в моем jfiddle здесь. Я не уверен, что это интерференция между флажком и группировкой строк? Пожалуйста, дайте мне знать, где я иду не так.

Примечание. Флажок основан на плагине от gyrocode. DataTables - версия 1.10.12.

5 ответов

Решение

Я сделал быструю проверку, и Эрик Гуан прав. Я просто выложу фрагмент кода:

function getSelected() {
   var selectedIds = tbl.columns().checkboxes.selected()[0];
   console.log(selectedIds)

   selectedIds.forEach(function(selectedId) {
       alert(selectedId);
   });
}

Смотрите: https://jsfiddle.net/nwmmbLso/3/

Я только что заметил, что у вас есть дубликаты идентификаторов учеников, которые также могут вызвать неожиданное поведение в используемой вами библиотеке. Приведенный выше код должен работать, если идентификаторы учеников уникальны.

Слишком поздно отвечать на этот вопрос. Но мой ответ может помочь другим в сообществе.

//datatable has to be initialized to a variable
var myTable = $('#calltable').dataTable();

//checkboxes should have a general class to traverse
var rowcollection = myTable.$(".call-checkbox:checked", {"page": "all"});

//Now loop through all the selected checkboxes to perform desired actions
rowcollection.each(function(index,elem){
    //You have access to the current iterating row
    var checkbox_value = $(elem).val();
    //Do something with 'checkbox_value'
});

Надеюсь, это поможет.

Работает и проверено.

      var id = "";
      var oTable = $(".table").dataTable();

      $(".check_quality:checked", oTable.fnGetNodes()).each(function() {
          if (id != "") {
              id = id + "," + $(this).data('id');
          } else {
              id = $(this).data('id');
          }
      });

для людей, которые сегодня все еще ищут ответ

      var rowcollection = table.columns(0).context[0].checkboxes.s.data;

Простой ответ - используйте либо table.rows( '.selected'), либо table.rows( {selected:true})

var count = $('#datatable').DataTable().rows( '.selected' ).count();

var checked_rows = $('#datatable').DataTable().rows( '.selected' ).data();

for(var i=0; i<checked_rows.length; i++)
{
  console.log( checked_rows[i] );               
}

Ссылка на документ: https://datatables.net/reference/api/count()

Другие вопросы по тегам