DataTables Checkboxes初始化默认勾选指定行复选框失效如何解决
问题根因
你的代码有两处错误直接导致默认勾选失效:
- 复选框列索引不匹配:
columnDefs中你给索引为2的列配置了Checkboxes扩展,但执行勾选操作时,传入的目标列索引是0,选中的是第一列无复选框的单元格,.checkboxes.select()方法作用在错误的单元格上自然不会生效。 - 数据类型不匹配:DataTables默认读取的单元格内容为字符串类型,你定义的待勾选ID数组
selected中存储的是数字类型,Array.indexOf()是严格相等匹配,字符串格式的ID和数字格式的ID不会判定为相等,行筛选逻辑会全部返回false。
修复代码
将初始化逻辑替换为以下版本即可,核心是统一复选框列索引、做数据类型转换:
jQuery(function($) { $('#questions-pool').DataTable({ ordering: false, dom: '<"#upper-controls"lf>t<"#lower-controls"ip>', lengthMenu: [ [10, 50, 100, -1], [10, 50, 100, 'All'] ], initComplete: function(settings) { const api = this.api(); const selected = [387, 386, 385, 384, 383, 382, 381, 380, 379, 378]; // 该索引需和columnDefs中checkboxes配置的targets值完全一致 const checkboxColIndex = 2; api.cells( api.rows(function(idx, data) { // 统一转为数字类型做匹配 const currentRowId = Number(data[checkboxColIndex]); return selected.includes(currentRowId); }).indexes(), checkboxColIndex ).checkboxes.select(); }, columnDefs: [{ targets: 2, checkboxes: { selectAllPages: false } }] }); });
注意:如果你实际将复选框放在第一列,只需把代码中
checkboxColIndex的值改为0,同时将columnDefs里的targets值也改为0,保证两处列索引完全统一即可。
内容的提问来源于stack exchange,提问作者Faye D.
相关产品推荐
相关产品推荐

