【问题标题】:fnupdate updates wrong row datatablesfnupdate 更新错误的行数据表
【发布时间】:2021-07-14 16:32:02
【问题描述】:

我正在尝试通过传递索引来更新一行。

http://live.datatables.net/raculubo/1/

但大多数时候它会替换错误的行。

代码是:-

$(document).ready(function() {

var table = $('#example').DataTable(); var index = table.column(0).data().indexOf("Cedric Kelly"); console.log("index2",index); table.row().data(["ax","by","dd"], index);

});

【问题讨论】:

  • 一些注意事项以防万一:(1)您只需要一个“准备好文档”功能。 (2) 您只需要一个var table = ... 语句。 (3) 使用$('#example').DataTable()$('#example').dataTable() 时要小心——它们意味着两个微妙的不同事物(详见here)。 (4) 这不是强制性的,但最好为函数使用现代名称 - 因此,不要使用旧的 fnUpdate(),而是使用 row().data()(有关详细信息,请参阅 here)。
  • 你现在可以检查一下吗....它的行为仍然相同。只需尝试替换名称即可编辑不同的行

标签: datatables


【解决方案1】:

这是因为您对数据进行排序的方式,导致“排序顺序”索引和“内部 DataTables”索引之间存在差异。

table.column(0).data() 函数将返回一个名称数组,如表中当前显示的那样,考虑到排序。在这种情况下,“Cedric Kelly”的索引因此是1

但是,DataTables 存储的内部唯一索引值实际上是 3,因为这是第一次加载数据时从 HTML 代码提供给 DataTables 的顺序(其中 Cedric Kelly 是列出的第 4 条记录 - 所以索引是 3)。

此初始加载发生在数据排序之前,并且在此步骤中分配数据索引。一旦分配,它们就永远不会改变(除非您删除数据)。

您的数据更新函数使用了 1 的值 - 因此更新了错误的行。

解决此问题的方法是告诉 DataTables 在 table.column(0).data() 函数中使用原始加载顺序:

var index = table.column(0, {order:'index'} ).data().indexOf("Cedric Kelly");

该指令 {order:'index'} 导致 DataTables 使用原始加载顺序。现在,将更新正确的记录,因为此 index 现在将返回 3 而不是 1

您可以查看有关此“选择器修饰符”语法here 的更多详细信息。

请记住,更新行的正确语法实际上是这样的:

table.row( index ).data(["ax","by","dd"]);

最后,请记住,如果您过滤数据,那么您就可以了,因为使用的默认值是 search: 'none' - 这意味着在选择列数据时“不考虑搜索/过滤”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多