Skip to content

Commit 06bf949

Browse files
committed
Added support for deferRender feature
1 parent b7b85dc commit 06bf949

File tree

2 files changed

+35
-16
lines changed

2 files changed

+35
-16
lines changed

js/dataTables.checkboxes.js

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -486,18 +486,24 @@ Checkboxes.prototype = {
486486
// Get cell data
487487
var cellData = this.data();
488488

489-
// If checkbox in the cell can be checked
490-
if(self.isCellSelectable(colIdx, cellData)){
491-
// If data is in the list
492-
if(ctx.checkboxes.s.data[colIdx].hasOwnProperty(cellData)){
493-
self.updateCheckbox(this, colIdx, true);
489+
// Determine if checkbox in the cell can be checked
490+
var isCellSelectable = self.isCellSelectable(colIdx, cellData);
494491

495-
// If row selection is enabled
496-
if(ctx.aoColumns[colIdx].checkboxes.selectRow){
497-
self.updateSelect(rowIdx, true);
498-
}
492+
// If checkbox is selected
493+
if(ctx.checkboxes.s.data[colIdx].hasOwnProperty(cellData)){
494+
self.updateCheckbox(this, colIdx, true);
495+
496+
// If row selection is enabled
497+
// and checkbox can be checked
498+
if(ctx.aoColumns[colIdx].checkboxes.selectRow && isCellSelectable){
499+
self.updateSelect(rowIdx, true);
499500
}
500501
}
502+
503+
// If checkbox is disabled
504+
if(!isCellSelectable){
505+
$('input.dt-checkboxes', this.node()).prop('disabled', true);
506+
}
501507
});
502508
},
503509

@@ -618,7 +624,11 @@ Checkboxes.prototype = {
618624
var ctx = self.s.ctx;
619625

620626
// If server-side processing is enabled
621-
if(ctx.oFeatures.bServerSide){
627+
// or deferred render is enabled
628+
//
629+
// TODO: it's not optimal to update state of checkboxes
630+
// for already created rows in deferred rendering mode
631+
if(ctx.oFeatures.bServerSide || ctx.oFeatures.bDeferRender){
622632
self.updateStateCheckboxes({ page: 'current', search: 'none' });
623633
}
624634

@@ -646,10 +656,14 @@ Checkboxes.prototype = {
646656
});
647657

648658
var $tableContainer = dt.table().container();
649-
var $checkboxes = $('.dt-checkboxes', cells.nodes()).not(':disabled');
650-
var $checkboxesChecked = $checkboxes.filter(':checked').not(':disabled');
651659
var $checkboxesSelectAll = $('.dt-checkboxes-select-all[data-col="' + colIdx + '"] input[type="checkbox"]', $tableContainer);
652660

661+
var countChecked = 0;
662+
var cellsData = cells.data();
663+
$.each(cellsData, function(index, cellData){
664+
if(self.s.data[colIdx].hasOwnProperty(cellData)){ countChecked++; }
665+
});
666+
653667
// If FixedHeader is enabled in this instance
654668
if(ctx._fixedHeader){
655669
// If header is floating in this instance
@@ -662,12 +676,12 @@ Checkboxes.prototype = {
662676
var isIndeterminate;
663677

664678
// If none of the checkboxes are checked
665-
if ($checkboxesChecked.length === 0) {
679+
if (countChecked === 0) {
666680
isSelected = false;
667681
isIndeterminate = false;
668682

669683
// If all of the checkboxes are checked
670-
} else if ($checkboxesChecked.length === $checkboxes.length) {
684+
} else if (countChecked === cellsData.length) {
671685
isSelected = true;
672686
isIndeterminate = false;
673687

@@ -973,7 +987,12 @@ Api.registerPlural( 'cells().checkboxes.enable()', 'cell().checkboxes.enable()',
973987
delete ctx.checkboxes.s.dataDisabled[colIdx][cellData];
974988
}
975989

976-
$('input.dt-checkboxes', cell.node()).prop('disabled', state);
990+
// Determine if cell node is available
991+
// (deferRender is not enabled or cell has been already created)
992+
var cellNode = cell.node();
993+
if(cellNode){
994+
$('input.dt-checkboxes', cellNode).prop('disabled', state);
995+
}
977996

978997
// If row selection is enabled
979998
if(ctx.aoColumns[colIdx].checkboxes.selectRow){

0 commit comments

Comments
 (0)