具有不同列数的数据表

这个月

我正在使用ajax加载数据并在DataTable中动态生成列名。我的数据表具有不同的列数,具体取决于用户的选择。(有一个下拉列表)。

例如,下拉列表中有2个选项,即“南部省”和“北部省”南部省表有4列,北部省表有6列。

场景1

第一个用户选择具有4列的Southern Province然后它生成的表没有错误,但是在此之后,如果用户选择具有6列的Northern Province,则表不会生成,并且js控制台打印错误,如下所示。

Uncaught TypeError: Cannot read property 'style' of undefined jquery.dataTables.js:3828

方案2

第一个用户选择具有6列的Northern Province然后它生成的表没有错误,但是在此之后,如果用户选择有4列的Southern Province,则表不会生成,并且js控制台打印错误,如下所示。

Uncaught TypeError: Cannot read property 'mData' of undefined jquery.dataTables.js:6122

但是,如果两个表具有相同的列数,则两个表都会生成而不会出错。

我该如何解决?

这是JS代码

jQuery(document)
.ready(
function() {
    $('#province-list').change(
            function() {
                var prov = $(this).val();
                if (prov == "sp") {
                    make_SP();
                } else if (prov == "np") {
                    make_NP();
                }
            });
    function make_SP() {
    $("#dataTables-res_item")
    .dataTable(
    {
        "bDestroy" : true,
        "bProcessing" : false,
        "bServerSide" : true,
        "sAjaxSource" : "/province_list_view?p_name=sp",
        "aoColumns" : [
                {
                    "mData" : "result_date",
                    "sTitle" : "Result Date"
                },
                {
                    "mData" : "result_day",
                    "sTitle" : "Result Day"
                },
                {
                    "mData" : "draw_number",
                    "sTitle" : "Draw Number"
                },
                {
                    "mData" : "draw_time",
                    "sTitle" : "Draw Time"
                } ],
        "order" : [ [ 0, "desc" ] ]
        });
    };                  
    function make_NP() {
        $("#dataTables-res_item")
        .dataTable(
        {
            "bDestroy" : true,
            "bProcessing" : false,
            "bServerSide" : true,
            "sAjaxSource" : "/province_list_view?p_name=np",
            "aoColumns" : [
                    {
                        "mData" : "result_date",
                        "sTitle" : "Result Date"
                    },
                    {
                        "mData" : "result_day",
                        "sTitle" : "Result Day"
                    },
                    {
                        "mData" : "draw_number",
                        "sTitle" : "Draw Number"
                    },
                    {
                        "mData" : "draw_time",
                        "sTitle" : "Draw Time"
                    },
                    {
                        "mData" : "draw_place",
                        "sTitle" : "Draw Place"
                    },
                    {
                        "mData" : "draw_person",
                        "sTitle" : "Agent"
                    } ],
            "order" : [ [ 0, "desc" ] ]
        });
    };
});
戴维·康拉德

我认为最安全的方法是完全删除表,然后在重新初始化之前将其重新插入DOM。在我看来,dataTables不能完全删除所有生成的内容,这就是为什么会发生错误(由于不同的原因)。从理论上讲,它应该或多或少地如上所述工作,但事实并非如此。考虑以下解决方案:

[下面的演示链接中的完整源代码]

var dataTable,
    domTable, 
    htmlTable = '<table id="example"><tbody></tbody></table>';

function initDataTable(province) {
    if ($.fn.DataTable.fnIsDataTable(domTable)) {
        dataTable.fnDestroy(true);
        $('body').append(htmlTable);
    } 
    var data = (province=='sp') ? sp : np;
    var columns = (province=='sp') ? spColumns : npColumns;    
    dataTable = $("#example").dataTable({
        aaData : data,
        aoColumns : columns
        /* other options here */
    });        
    domTable = document.getElementById('example');
}

$('#province-list').change(function() {
    var prov = $(this).val();
    initDataTable(prov);
});

这有效。参见demo-> http://jsfiddle.net/gss4a17t/基本上与OP中的相同,但是我对不同的省使用不同的功能,而不是对不同的省使用不同的功能aoColumns而不是依靠bDestroy,我删除整个<table>dataTable.fnDestroy(true)(DOM都和数据表注射),然后重新插入<table>重新初始化数据表之前-skeleton。

我不知道这是否适合OP的需要,但这就是我会做的方式。它对于将来的更改更加灵活,并且aoColumns-objects可以从脚本自动生成,也可以通过AJAX从服务器实现(例如,如果您想为不同的语言使用不同的标题)。“皮带和括号” :)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当数据表具有不同的列时,使用 linq 查找数据表中的差异

来自分类Dev

具有动态列的数据表

来自分类Dev

在数据表中添加具有可变列数的行

来自分类Dev

如何从其他数据表创建具有列结构的新数据表?

来自分类Dev

如何从其他数据表创建具有列结构的新数据表?

来自分类Dev

Laravel 数据表添加具有特定 html 的列

来自分类Dev

合并具有不同列数的表

来自分类Dev

一页上多个表的数据表具有不同的td计数

来自分类Dev

具有动态 ID 的数据表

来自分类Dev

交叉表/数据透视查询具有不同的列数(取决于字段)

来自分类Dev

R:如何将文件读取到具有不同分割的数据表中?

来自分类Dev

Laravel数据表服务使用具有不同名称的关系

来自分类Dev

具有不同的显示值,但按原始值排序jQuery数据表

来自分类Dev

获取具有C#中不同行的数据表

来自分类Dev

合并具有不同列名的两个数据表

来自分类Dev

将列添加到具有有限列的数据表中

来自分类Dev

使用具有列映射的数据表更新/插入到SQL表

来自分类Dev

如何在C#中从具有两列的另一数据表中获取一个具有两列的数据表

来自分类Dev

自动计算数据表页脚中具有数字数据的列的总和

来自分类Dev

具有动态列的素数数据表的动态数量-列数错误

来自分类Dev

我需要帮助将两个不同的行(具有相同的列)添加到同一个数据表

来自分类Dev

使数据表中的列数可变

来自分类Dev

带有下拉列的数据表

来自分类Dev

每行具有不同列数的html表

来自分类Dev

.NET将数据表的内容转换为具有不同架构的另一个数据表

来自分类Dev

数据表特定的列过滤器,具有多选下拉菜单

来自分类Dev

如何使用rbind合并具有POSIXct和Date列类的数据表?

来自分类Dev

从具有多列的数据表中进行ANOVA测试

来自分类Dev

仅在R中的数据表中对具有数值的列运行函数

Related 相关文章

  1. 1

    当数据表具有不同的列时,使用 linq 查找数据表中的差异

  2. 2

    具有动态列的数据表

  3. 3

    在数据表中添加具有可变列数的行

  4. 4

    如何从其他数据表创建具有列结构的新数据表?

  5. 5

    如何从其他数据表创建具有列结构的新数据表?

  6. 6

    Laravel 数据表添加具有特定 html 的列

  7. 7

    合并具有不同列数的表

  8. 8

    一页上多个表的数据表具有不同的td计数

  9. 9

    具有动态 ID 的数据表

  10. 10

    交叉表/数据透视查询具有不同的列数(取决于字段)

  11. 11

    R:如何将文件读取到具有不同分割的数据表中?

  12. 12

    Laravel数据表服务使用具有不同名称的关系

  13. 13

    具有不同的显示值,但按原始值排序jQuery数据表

  14. 14

    获取具有C#中不同行的数据表

  15. 15

    合并具有不同列名的两个数据表

  16. 16

    将列添加到具有有限列的数据表中

  17. 17

    使用具有列映射的数据表更新/插入到SQL表

  18. 18

    如何在C#中从具有两列的另一数据表中获取一个具有两列的数据表

  19. 19

    自动计算数据表页脚中具有数字数据的列的总和

  20. 20

    具有动态列的素数数据表的动态数量-列数错误

  21. 21

    我需要帮助将两个不同的行(具有相同的列)添加到同一个数据表

  22. 22

    使数据表中的列数可变

  23. 23

    带有下拉列的数据表

  24. 24

    每行具有不同列数的html表

  25. 25

    .NET将数据表的内容转换为具有不同架构的另一个数据表

  26. 26

    数据表特定的列过滤器,具有多选下拉菜单

  27. 27

    如何使用rbind合并具有POSIXct和Date列类的数据表?

  28. 28

    从具有多列的数据表中进行ANOVA测试

  29. 29

    仅在R中的数据表中对具有数值的列运行函数

热门标签

归档