JQuery Datatables:无法读取未定义的属性'aDataSort'

swa*_*eek 76 javascript jquery jquery-datatables

我创造了这个小提琴,它按照我的要求运作良好:小提琴

但是,当我在我的应用程序中使用相同的内容时,我在浏览器控制台中出现错误,指出无法读取未定义的属性"aDataSort"

在我的应用程序中,javascript读取如下所示:我检查了控制器输出...它运行良好并且也打印在控制台上.

$(document).ready(function() {

    $.getJSON("three.htm", function(data) {
             // console.log("loadDataTable >>  "+JSON.stringify(data));
             })
             .fail(function( jqxhr, textStatus, error ) {
             var err = textStatus + ', ' + error;
             alert(err);
             console.log( "Request Failed: " + err);
             })
             .success(function(data){
                 loadDataTable(data);
             });

    function loadDataTable(data){
         $("#recentSubscribers").dataTable().fnDestroy();    
         var oTable = $('#recentSubscribers').dataTable({
             "aaData" : JSON.parse(data.subscribers),
             "processing": true,
            "bPaginate": false,
            "bFilter": false,
            "bSort": false,
            "bInfo": false,
            "aoColumnDefs": [{
            "sTitle": "Subscriber ID",
            "aTargets": [0]
        }, {
            "sTitle": "Install Location",
            "aTargets": [1]
        }, {
            "sTitle": "Subscriber Name",
            "aTargets": [2]
        }, {
            "aTargets": [0], 
            "mRender": function (data, type, full) {
                return '<a style="text-decoration:none;" href="#" class="abc">' + data + '</a>';
            }
        }],
            "aoColumns": [{
            "mData": "code"
        }, {
            "mData": "acctNum"
        }, {
            "mData": "name"
        }]
            });

    }       

})
Run Code Online (Sandbox Code Playgroud)

小智 113

重要的是你的THEAD在表格中不是空的.由于dataTable要求你指定预期数据的列数.根据你的数据,它应该是

<table id="datatable">
    <thead>
        <tr>
            <th>Subscriber ID</th>
            <th>Install Location</th>
            <th>Subscriber Name</th>
            <th>some data</th>
        </tr>
    </thead>
</table>
Run Code Online (Sandbox Code Playgroud)

  • 如果我的要求涉及在运行时配置列和所述列的数量,该怎么办?如何实现上述要求的代码? (23认同)
  • `<thead>`必须包含一个`<tr>`,然后是`<th>`s (2认同)

hog*_*h45 47

也有这个问题,这个数组超出了范围:

order: [1, 'asc'],
Run Code Online (Sandbox Code Playgroud)

  • 我在这里指定了 5 和 7 的列!谢谢 (3认同)
  • 一!星期!整整一周!这一周只有 7 天!而且我很确定我_不是_朝九晚五工作,更像是朝九晚五工作......所有这些都失去了_因为我不知道这个错误_!啊啊啊啊!!……浪费了这么多时间,我感到非常羞愧,我一遍又一遍地在互联网上搜索并尝试了所有可能的解决方案 - 没有一个能够接近“解决”这个问题。然后...纯粹是偶然,已经绝望了...我看到了你的答案,然后塔达!五分钟内,_一切都解决了_。如果我很有钱,我会给你寄一张 1 万欧元的支票 — 哈哈 (3认同)
  • 这个总是让我着迷。如果数组超出范围,有没有办法将数组默认为 0? (2认同)
  • @JGreasley您可以将其设置为空数组:order:[] (2认同)

Abd*_*nan 8

我遇到了同样的问题,以下更改解决了我的问题。

$(document).ready(function() {
     $('.datatable').dataTable( {
            bSort: false,
            aoColumns: [ { sWidth: "45%" }, { sWidth: "45%" }, { sWidth: "10%", bSearchable: false, bSortable: false } ],
        "scrollY":        "200px",
        "scrollCollapse": true,
        "info":           true,
        "paging":         true
    } );
} );
Run Code Online (Sandbox Code Playgroud)

aoColumns数组描述了每列的宽度及其sortable属性。

当您按不存在的列号进行排序时,还会出现要提及此错误的另一件事。


Oli*_*del 6

对我而言,该错误在于DataTables本身。DataTables 1.10.9中用于排序的代码不会检查界限;因此,如果您使用类似

order: [[1, 'asc']]
Run Code Online (Sandbox Code Playgroud)

对于空表,没有行idx 1->此异常确保。这是由于异步获取表的数据而发生的。最初,在页面加载时,dataTable被初始化为不包含数据。应在获取结果数据后立即对其进行更新。

我的解决方案:

// add within function _fnStringToCss( s ) in datatables.js
// directly after this line
// srcCol = nestedSort[i][0];

if(srcCol >= aoColumns.length) {
    continue;
}

// this line follows:
// aDataSort = aoColumns[ srcCol ].aDataSort;
Run Code Online (Sandbox Code Playgroud)


Jum*_*ant 5

就我而言,我有

$(`#my_table`).empty();
Run Code Online (Sandbox Code Playgroud)

它应该在哪里

$(`#my_table tbody`).empty();
Run Code Online (Sandbox Code Playgroud)

注意:就我而言,我必须清空表,因为在插入新数据之前我有想要删除的数据。

只是想分享它“可能”在未来帮助别人!