JQuery DataTable添加数据时出现未知参数警告,如何解决?
问题场景
HTML代码
<table id='students_grid' class='table table-bordered table-striped' cellpadding='0' cellspacing='0' > <thead> <tr> <th>Student ID</th> <!-- Hidden --> <th>Sr. No.</th> <th>Student Name</th> <th>Address</th> <th>Parent Code</th> <!-- Hidden --> <th>Parent Name</th> </tr> </thead> <tbody> </tbody> </table>
JS初始化代码
$("#students_grid").DataTable({ "select": {style: 'single'}, "columnDefs": [ { "data":"studentid", "targets": [ 0 ], "visible": false, "searchable": false }, { "data":"parentcode", "targets": [ 4 ], "visible": false, "searchable": false } ] });
添加数据代码(按钮点击时触发)
studenttable = $("#students_grid").DataTable(); studenttable.row.add( [ $("#studentid").val(), $("#srno").val(), $("#studentname").val(), $("#address").val(), $("#parentcode").val(), $("#parentname").text() ]).draw(false);
问题描述
点击按钮添加数据后,会弹出如下警告:
DataTables warning: table id=students_grid - Requested unknown parameter 'studentid' for row 0, column 0. For more information about this error, please see http://datatables.net/tn/4
尽管数据已成功添加至表格,但每次添加数据都会触发该警告,且警告中的行号随添加次数递增。移除初始化配置中的data声明后,警告不再出现。请问如何在保留data配置的前提下,规避该警告?
解决方案
问题根源
初始化时给部分列指定了data属性,会让DataTables默认启用对象数据源模式,即每行数据需要是包含对应字段的对象。但添加数据时用的是数组模式,两种模式不匹配,导致DataTables无法找到指定的studentid等字段,从而抛出警告。
解决步骤
要保留data配置,需统一数据源模式为对象模式,具体操作如下:
- 完善初始化配置:给所有列指定对应的
data字段,确保每个列都有明确的字段映射:
$("#students_grid").DataTable({ "select": {style: 'single'}, "columnDefs": [ { "data": "studentid", "targets": 0, "visible": false, "searchable": false }, { "data": "srno", "targets": 1 }, { "data": "studentname", "targets": 2 }, { "data": "address", "targets": 3 }, { "data": "parentcode", "targets": 4, "visible": false, "searchable": false }, { "data": "parentname", "targets": 5 } ] });
- 修改添加数据代码:改用对象格式传入数据,每个属性对应初始化时指定的
data字段:
const studenttable = $("#students_grid").DataTable(); studenttable.row.add({ studentid: $("#studentid").val(), srno: $("#srno").val(), studentname: $("#studentname").val(), address: $("#address").val(), parentcode: $("#parentcode").val(), parentname: $("#parentname").text() }).draw(false);
这样修改后,数据源模式统一,DataTables能正确识别每个列的字段映射,既保留了data配置,也不会再触发警告。
内容的提问来源于stack exchange,提问作者Sangeet Menon
相关产品推荐
相关产品推荐

