隐藏列后DataTable插入行报错:Requested unknown parameter '6'
问题根源分析
这个报错的核心原因是DataTables 不管列是否设置为隐藏,都要求每行数据的元素数量和表格的总列数完全匹配。你可能误以为隐藏列后就可以少传对应的数据,但实际上,隐藏列只是在视觉上不显示,表格的列结构(总列数)并没有改变,DataTables依然会尝试为每一列(包括隐藏列)匹配对应位置的数据。
具体到你的场景:
- 你的HTML表格一共有7列(索引从0到6)
- 当选择"PO"时,你隐藏了索引为4的列(Markup Amount),但表格总列数还是7
- 此时你插入行时只传了6个数据元素,DataTables找不到第7列(索引6)对应的参数,所以抛出了
Requested unknown parameter '6' for row 0, column 6的错误
解决方案
你需要保持插入的行数据元素数量始终和总列数一致,针对隐藏列可以传入空值或者对应的默认值,而不是减少数据长度。修改你的插入代码如下:
//INSERT NEW PRICE LEVEL INTO THE ITEM PRICE TABLE $('#insertplvl').click(function(){ //Checking what method is selected if ($('#price_method').val()=="CM"){ //starting to add the new row into the DataTable, and No columns hiding it_det.row.add([ "D", "COST MARKUP", "1", "999999999", "0.00", "0.00", "<input type='checkbox' name='chkdet' class='chk_plvl' id='"+ct_row+"'/>" ]).draw(false); }else{ //保持7个元素,隐藏列传空值或默认值 it_det.row.add([ "D", "PRICE OVERRIDE", "1", "999999999", "", // 对应隐藏的Markup Amount列,可根据需求传默认值 "0.00", // Unit Price列 "<input type='checkbox' name='chkdet' class='chk_plvl' id='"+ct_row+"'/>" ]).draw(false); } //Increasing the counter ct_row++; })
另外,还有一个优化点:你不需要每次切换下拉框时都销毁重建DataTable,可以直接通过column().visible()方法切换列的显示状态,这样更高效,也避免了销毁重建可能带来的其他问题:
//Changing Type of Price level will change datatable $('#price_method').on("change", function(){ var oTable = $('#item_pricelvl').DataTable(); oTable.clear().draw(); //直接切换列的可见性,无需销毁重建 if ($(this).val()=="PO"){ oTable.column(4).visible(false); }else{ oTable.column(4).visible(true); } });
这样修改后,既解决了报错问题,也优化了表格的切换逻辑。
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

