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()