使用Jquery为Datatable进行动态绑定时,没有获得Id的行

时间:2016-11-21 08:04:19

标签: jquery json datatable

一切都很好。但是当我点击那个图标时它的错误值有时在onclick函数的结果[i] [10]中无法获得id。任何人都可以告诉我我做错了什么。

 success: function (response) {
                debugger;
                var result = response.map(function (item) {
                    var result = [];
                    // result.push(i++);
                    result.push(item.GunId)
                    result.push(item.BranchName);
                    result.push(item.GunSerialNo);
                    result.push(item.GunTypeName);
                    result.push(item.ModelNo);
                    result.push(item.CarriedBy);
                    result.push(item.Bullets);
                    result.push(item.Purpose);
                    result.push(item.IssueDate);
                    result.push(item.IssueTime);
                    result.push(item.EstimatedTime)

                    //result.push(item.a)

                    return result;
                });
                for (var i = 0; i < result.length; i++) {
                    result[i][0] = "<span hidden='hidden'>" + result[i][0] + "</span>";                       
                    result[i][0] = "<span>" + result[i][1] + "</span>";
                    result[i][1] = "<span>" + result[i][2] + "</span>";
                    result[i][2] = "<span>" + result[i][3] + "</span>";
                    result[i][3] = "<span>" + result[i][4] + "</span>";
                    result[i][4] = "<span>" + result[i][5] + "</span>";
                    result[i][5] = "<span>" + result[i][6] + "</span>";
                    result[i][6] = "<span>" + result[i][7] + "</span>";
                    result[i][7] = "<span>" + result[i][8] + "</span>";
                    result[i][8] = "<span>" + result[i][9] + "</span>";
                    result[i][9] = "<span>" + result[i][10] + "</span>";
                    result[i][10] = "<button type='button' title='Remarks' class='btn btn-xs  btn-default' data-toggle='modal' data-target='#gun-tracking-remark-popup' onclick='OpenRemarks (result[i][0])' ><i class='fa fa-info-circle'></i></button>";

                    $("#GunTracking-detail-datatable").DataTable().row.add(result[i]);


                }
                $("#GunTracking-detail-datatable").DataTable().draw();
            }

1 个答案:

答案 0 :(得分:1)

我假设您正在使用DataTables 1.10。如果是这样,你真的在​​这里与你的图书馆作斗争。

首先,您可以定义您的&#34;数据 - &gt;柱&#34;使用&#34;列进行映射&#34;构造DataTable时的选项。这样您就不必像现在这样构建地图。相反,它只能读取您的数据集。 https://datatables.net/reference/option/columns.data

接下来你可以使用&#34;渲染&#34;选项&#34;列&#34;定义&#34;显示&#34;渲染每个数据项。在这里你可以用span元素包装东西以便显示,但在排序或过滤时省略它们。您可以在此处使用函数,以便可以在大多数列中重复使用相同的常规函数​​。 https://datatables.net/reference/option/columns.render

接下来,如果您需要对服务器的返回进行大量控制,以防您无法修改服务器端代码,则可以使用&#34; ajax&#34;来指定您自己的JQuery ajax函数。选项。 https://datatables.net/reference/option/ajax

最后,对于您的按钮点击事件,您可以使用委派的点击事件将数据表添加到页面后连接它们,如下所示:

var dataTable = $(dataTableSelector);
dataTable.on("click", "tbody tr td.buttonCellClass", function(evt) {
  // Do stuff;
});   

我正忙着在这个库中加入一个非常复杂的服务器端处理实现。相信我使用图书馆比使用它更容易。

编辑:忘了在&#34; columnDefs&#34;中提及您也可以为您的单元格指定类。

但是,如果您只是希望快速而肮脏的解决方案来解决您的问题。我认为代码中的问题就在这一行:

result[i][10] = "<button type='button' title='Remarks' class='btn btn-xs  btn-default' data-toggle='modal' data-target='#gun-tracking-remark-popup' onclick='OpenRemarks (result[i][0])' ><i class='fa fa-info-circle'></i></button>";

您需要更改此部分:

onclick='OpenRemarks(result[i][0])'

TO:

onclick='OpenRemarks(" + result[i][0] + ")'

您在字符串文字

中拥有数组访问器

EDIT2:当我需要双引号时使用单引号。