无法重新初始化JQuery DataTable

pan*_*njo 22 javascript jquery json jquery-datatables

我正在使用jquery数据表来显示网格内的数据.在初始页面加载脚本采取DateTime.Today并进一步处理它们,问题是在初始页面加载之后,当我试图将用户输入日期用于进一步处理时.我有以下错误.

DataTables警告(table id ='dataTable'):无法重新初始化DataTable.要检索此表的DataTables对象,请不要传递任何参数或查看bRetrieve和bDestroy的文档

function getDate() {
    var date = $('input[name="myDate"]').val();
    return date;
}

$('#myDate').click(updateDate);

function updateDate() { 
    $('#dataTable').dataTable({
        "bServerSide": true,
        "sAjaxSource": "/Home/Ajax",
        "fnServerParams": function (aoData) {
            var date = getDate();
            aoData.push({ "name": "myDate", "value": date });
        },
        //... there's more
}

updateDate();
Run Code Online (Sandbox Code Playgroud)

脚本放在页面底部.

小智 53

尝试添加"bDestroy":true到选项对象文字,例如

$('#dataTable').dataTable({
    "bServerSide": true,
    ....
    "bDestroy": true
});
Run Code Online (Sandbox Code Playgroud)

  • 只使用bDestroy为我工作很好:是的 (3认同)
  • 新数据将被添加到旧数据中,然后您将获得两个数据的表 (2认同)

Nis*_*Nis 12

我知道这是一个老问题.但这适用于其他有类似问题的人.

您应该销毁旧的dataTable分配.在创建新数据表之前,请使用以下代码

$("#dataTable").dataTable().fnDestroy();
Run Code Online (Sandbox Code Playgroud)


Mis*_*ith 11

DataTables API已更改,但如果您尝试再次重新初始化数据表,则仍会抛出此错误.

您可以检查它是否已经创建:

$.fn.DataTable.isDataTable("#myTable")
Run Code Online (Sandbox Code Playgroud)

并销毁它,以便它可以再次重建:

$('#myTable').DataTable().clear().destroy();
Run Code Online (Sandbox Code Playgroud)

它不是最有效的方式,但它有效.应该可以在不破坏它的情况下更新表,只需使用clearrow.add,但是当数据源是传递给构造函数的数组时,我还没有找到一种方法.

  • 我们现在应该用大写的'D`字母来处理`DataTable`吗? (2认同)