【问题标题】:Data table- dynamic initialization of multiple tables数据表-多表动态初始化
【发布时间】:2017-03-08 12:55:10
【问题描述】:

在我的应用程序中,我需要在模态弹出窗口中构建动态(thead 和 tbody)数据表。使用我的代码,我可以使用 materializecss 创建动态表。但是当我点击第二个表格链接时,之前的表格内容并没有被清除。因此,所有动态表内容都复制了相同的数据。我使用以下行来破坏表。但是得到这个错误'Uncaught TypeError: Cannot read property 'aDataSort' of undefined'

$("#dataSyncTbl").dataTable().fnDestroy();

但它不起作用。这是我的代码。

HTML 代码:

<div id="dataSyncModal" class="modal" style="width:65%">
            <button class="modal-close btn-flat">X</button>
            <div class="modal-content" id="dataSyncModalContent">
                <table id="dataSyncTbl"></table>
                <div class="row center-align" id="dataSyncSpinner">
                    <h1>&nbsp;</h1>
                    <div class="preloader-wrapper small active">
                        <div class="spinner-layer spinner-blue-only">
                            <div class="circle-clipper left">
                                <div class="circle"></div>
                            </div><div class="gap-patch">
                                <div class="circle"></div>
                            </div><div class="circle-clipper right">
                                <div class="circle"></div>
                            </div>
                        </div>
                    </div>
                    <h1>&nbsp;</h1>
                </div>

            </div>
        </div>
    </div>

$(document).on("click", ".openQueryMdl", function (event) {
                $("#dataSyncModal").openModal();
                var sortId = $(this).attr("data-sort-id");
                $('#dataSyncTbl thead').remove();
                $('#dataSyncTbl tbody').remove();
                $("#dataSyncTbl").dataTable().fnDestroy();
                alert(sortId);
                var data = {
                    "customcols": ['ID', 'Type', 'Name', 'AssetClass', 'test3'], "mydata": [{ "ID": "2", "Type": "No Fund/Product Found", "Name": "", "AssetClass": "Private Equity", "Dateasof_Passed": "", "test3": "" },
                            { "ID": "1", "Type": "No Fund/Product Found", "Name": "", "AssetClass": "Private Equity", "Dateasof_Passed": "", "test3": "" }]
                };
                if (sortId == 7) {

                data = {
                    "customcols": ['ID', 'Type', 'Name', 'AssetClass', 

'test3', 'test1', 'test2'], "mydata": [{ "ID": "4", "Type": "No Fund/Product Found", "Name": "", "AssetClass": "Private Equity", "Dateasof_Passed": "", "test3": "", "test1": "11", "test2": "eee" },
                                { "ID": "5", "Type": "No Fund/Product Found", "Name": "", "AssetClass": "Private Equity", "Dateasof_Passed": "", "test3": "", "test1": "11", "test2": "eee" }]
                };

            }
            else if (sortId == 15) {


            }
            loadQueryDetails(data);
        });
    });

    function loadQueryDetails(data) {
        console.log(data.customcols.length);
        $("#dataSyncSpinner").addClass("hide");

        var mainData = data.mydata;
        var column_names = data.customcols;
        var columns = [];
        for (var i = 0; i < column_names.length; i++) {
            columns[i] = {
                'title': column_names[i],
                'data': column_names[i]
            }
        };
    //    $("#dataSyncTbl").dataTable().fnDestroy();
        $('#dataSyncTbl').DataTable({
            columns: columns,
            data: mainData,
            "bSort": false,
            "searching": false,
            "bInfo": false,
            "paging": false,
            "destroy": true
        })
    }

【问题讨论】:

    标签: javascript jquery datatable materialize


    【解决方案1】:

    fnDestroy() 不是官方 API。请改用$("#dataSyncTbl").dataTable().destroy(true);。

    请参阅https://datatables.net/reference/api/destroy() 了解更多信息。

    【讨论】:

    • 我尝试使用上述代码。但我得到这个错误'Uncaught TypeError: Cannot read property 'aDataSort' of undefined'
    • 我认为您不应该手动删除thead 和tbody。尝试删除“$('#dataSyncTbl thead').remove();”行和“$('#dataSyncTbl tbody').remove();”在你打电话之前destroy()
    • 我也试过这些,但得到这个错误'未捕获的类型错误:无法读取未定义的属性'样式'
    • 这可能是因为第一次调用destroy()时表没有初始化
    • 你可以通过在 if 语句中包装 destroy() 来解决这个问题:`if($.fn.DataTable.isDataTable('#dataSyncTbl tbody')) { ...destroy() } ;
    猜你喜欢
    • 2011-10-30
    • 2014-08-24
    • 2016-08-23
    • 2023-03-19
    • 2014-12-14
    • 2020-05-04
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多