【问题标题】:DataTables warning (table id = 'IDTableName'): Cannot reinitialise DataTable数据表警告(表 id = 'IDTableName'):无法重新初始化数据表
【发布时间】:2013-08-31 15:08:09
【问题描述】:

我在 ASP.NET 和 UpdatePanel (scriptManager) 中使用 Jquery Datatable。 我有以下错误:

DataTables 警告(表 id = 'tbVerificationApplicant'):不能 重新初始化 DataTable。

要检索此表的 Datatables 对象,请不传递任何参数或 请参阅 bRetrieve 和 bDestroy 的文档

这是创建表的 Jquery 文件:

function DatatablesExec() { 
        $('#tbVerificationApplicant').dataTable({
            'bProcessing': true,
            'bServerSide': true,
            "sPaginationType": "full_numbers",
            'sAjaxSource': 'listVerificationData.ashx?ddlStatusValue=' + $("#ddlStatusClient option:selected").text(),
            "fnDrawCallback": function () {
                $('#tbVerificationApplicant tbody tr').click(function () {
                    var hRef = $("td:eq(0)", this).text();
                    document.location.href = 'frm_VerifyIdentity.aspx?ID=' + hRef;
                });
            }
    });
}

$(document).ready(function () {
    /* Initialise the DataTable */

        DatatablesExec()

});

但是,为了避免在我更改下拉列表后表格消失,我在 web 表单后面的代码中添加了下面的下一个代码。

protected void Page_Prerender(object sender, EventArgs e)
{
    {
        ScriptManager.RegisterStartupScript(this, this.GetType(), "_function_dummyname", "<script type='text/javascript'>DatatablesExec();</script>", false);
    }
}

它运行良好,但在开始时会出现一个带有此错误的弹出窗口。

这是网络表单的一部分:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddlStatusClient" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
        <table id="tbVerificationApplicant" class="display">
                <thead>

【问题讨论】:

    标签: jquery datatables


    【解决方案1】:

    这也让我发疯了,所以我想我应该添加对我有用的解决方案。

    如果您发送的任何 Ajax 请求在表格的某些元素中做出响应,则需要在表格配置中设置

    bRetrieve: true 
    

    SUVASH'S BLOG explains:

    还有另一种情况,比如你发送了多个 ajax 请求 哪个响应将访问同一个模板中的同一个表,然后我们将 也会出错。在这种情况下,fnDestroy 方法无法正常工作 因为你不知道哪个反应先或后。然后你 必须在数据表配置中设置 bRetrieve TRUE。就是这样。

    【讨论】:

      【解决方案2】:

      当您的页面加载时,您的函数DatatablesExec() 会执行两次:一次在代码隐藏Page_Prerender 中,一次在$(document).ready 函数中。

      该错误表示您正在尝试将表设为 Datatable,而实际上它已经是 Datatable。

      您将不得不在这里重新考虑您的设计。

      为什么要在 PreRender 中注册 StartupScript?

      尝试删除两个DatatablesExec() 之一,您的问题应该会消失!

      【讨论】:

      • 嗨。我在 PreRender 中使用了 RegisterStartupScript,因为我使用的是 UpdatePanel 控件,当我单击下拉列表时,表格消失了。这就是为什么,如果我删除它,这将不再起作用。我需要从 PreRender 中的 RegisterStartupScript 引用 Jquery 中的函数。你知道我该如何修改它吗?
      • 我在函数中添加了 "bDestroy": true 并且正在工作,错误消失了,但第一次加载中的布局正在丢失。你知道为什么吗?
      • 在再次初始化之前尝试在您的表上运行 fnDestroy()
      • 谢谢!谢谢!谢谢!这让我发疯了!有趣的事实:我知道我调用了两次!
      【解决方案3】:

      我也遇到过这个问题,我阅读了有关解决此问题的不同主题,但没有运气。 但最后我已经在 jquery 窗口加载方法中初始化了数据表

      $(window).load(function(){
      $("#example").DataTable();
      }); 
      

      代替jquery的document ready方法

      $(document).ready(function(){
      $("#example").DataTable();
      });
      

      奇迹发生了:) .. 希望对你有帮助。谢谢

      【讨论】:

        【解决方案4】:

        大家好,我只是想在这种情况下添加一些东西,我也体验过它并且也在寻找这个问题的解决方案,但现在我找到了答案而不是使用 bDestroy 在我的情况下总是检查你的数据表的引用 id 如果你已经使用了这个

        $('#dtAddParticipantList').dataTable 
        

        你的其他表也使用这个

        $('#dtAddParticipantList').dataTable 
        

        改成不一样的

        var oTable = $('#dtParticipantList').dataTable({ 
         //some code stuffs
        });
        

        【讨论】:

          【解决方案5】:

          尝试将destory: true 添加到您的数据表配置中:

          $('#dataTable').dataTable({
            destory: true,
            ...
          });
          

          【讨论】:

            【解决方案6】:

            $('#example').dataTable().fnClearTable();
            $('#example').dataTable().fnDestroy();

            【讨论】:

              猜你喜欢
              • 2013-06-12
              • 2012-11-22
              • 1970-01-01
              • 2019-06-18
              • 2017-08-28
              • 1970-01-01
              • 2019-12-05
              • 1970-01-01
              • 2014-08-24
              相关资源
              最近更新 更多