数据表 - 通过单击事件获取当前行的数据库 ID


DataTables - Getting the database ID of the current row via click event

我正在尝试在单击按钮时获取当前行的数据库 ID。

我已经看到了一些与此方面有关的示例,并尝试了很多,但似乎它们主要与旧版表格工具扩展有关,而我正在使用编辑器。

使用编辑器手册中的 idSrc 选项,我收到包含数据库 id/主键值的 JSON 服务器端响应:

{
  "data":[
    {
      "id":"1",
      "name":"Test Name",
    }
  ],
  "options":[],
  "files":[]
}

现在我尝试通过单击通过 API 函数附加到行的按钮来获取该值:row().id()

在此函数的示例中,它提供了一个如何获取行 id 值(现在是数据库 id?)的清晰示例:

var table = $('#myTable').DataTable();
$('#myTable').on( 'click', 'tr', function () {
  var id = table.row( this ).id();
  alert( 'Clicked row id '+id );
});

所以我按如下方式实现了这一点:

var editor;
$(document).ready(function() {
  editor = new $.fn.dataTable.Editor( {
    ajax: "/names.php",
    table: "#example",
    idSrc: "id",
    fields: [ {
      label: "Name:",
      name: "name"
    } ]
  });
  var table = $('#example').DataTable( {
    dom: "Bfrtip",
    ajax: "/names.php",
    columns: [
      { data: "name" }
    ]
  });
  $('#example').on( 'click', 'tr', function () {
    var id = table.row( this ).id();
    alert( 'Clicked row id ' + id );
  });
});

这里的问题是,当我单击行(tr)时,它会提示如下:Clicked row id undefined

为什么我得到一个未定义的值,而它应该发回行 id?

实例化数据表时,必须指示 id 字段 rowId ,该字段应指示为列的名称

var table = $('#example').DataTable( {
dom: "Bfrtip",
ajax: "/names.php",
columns: [
  { data : "id" },//id is the name of your data
  { data: "name" }
],
rowId: 'id' //Here assign the id to your table
});

结果:https://jsfiddle.net/cmedina/7kfmyw6x/17/

正如@CMedina指出的,rowId规定了JSON数据中的哪个值用作每行id属性。

以下是用于获取以 row_ 为前缀的行 ID 值的代码:

$('#example').on( 'click', 'tr', function () {
  // Get the rows id value
  var id = table.row( this ).id();
  // Filter for only numbers
  id = id.replace(/'D/g, '');
  // Transform to numeric value
  id = parseInt(id, 10);
  // So instead of returning the actual id which is row_1
  // We get back just the primary key which is 1
  alert( 'Clicked row id '+id );
});