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

时间:2015-02-11 12:18:53

标签: javascript jquery jquery-datatables

我创造了这个小提琴,并且根据我的要求运作良好:Fiddle

但是,当我在我的应用程序中使用相同内容时,我在浏览器控制台中收到错误消息无法读取属性' 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"
        }]
            });

    }       

})

10 个答案:

答案 0 :(得分:99)

您的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>

答案 1 :(得分:41)

也有这个问题, 这个阵列超出了范围:

order: [1, 'asc'],

答案 2 :(得分:5)

对我来说,错误发生在DataTables本身; DataTables 1.10.9中的排序代码不会检查边界;因此,如果你使用像

这样的东西
order: [[1, 'asc']]

有一个空表,没有行idx 1 - &gt;这种例外可以确保 这是因为正在异步获取表的数据。最初,在页面加载时,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;

答案 3 :(得分:2)

我也有这个问题,以下更改解决了我的问题。

$(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
    } );
} );

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

答案 4 :(得分:1)

我有

$(`#my_table`).empty();

应该在的地方

$(`#my_table tbody`).empty();

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

只想在将来共享“可能”在哪里帮助某人!

答案 5 :(得分:1)

由于分析,您需要将单引号[']切换为双引号["]

如果您在表上使用数据顺序属性,则可以像这样data-order='[[1, "asc"]]'

使用它

答案 6 :(得分:1)

对于我来说,我通过在配置数据表的脚本中应用order属性时建立有效的列号来解决了这个问题。

var table = $('#mytable').DataTable({
     .
     .
     .
     order: [[ 1, "desc" ]],

答案 7 :(得分:1)

大多数情况下,它发生在某些未定义的情况下。我复制了代码并删除了几个按索引扰乱顺序的列。小心地进行更改和之后的每个变量。 "order": [[1, "desc"]], 修复了我之前使用 "order": [[24, "desc"]] 的问题,并且该索引不可用。

答案 8 :(得分:0)

我遇到了这个问题,这是因为另一个脚本正在删除所有表并重新创建它们,但是并没有重新创建我的表。我花了很长时间在这个问题上,直到我发现我的桌子在页面上什至不可见。在初始化DataTables之前可以看到表吗?

本质上,另一个脚本正在执行:

let tables = $("table");
for (let i = 0; i < tables.length; i++) {
  const table = tables[i];
  if ($.fn.DataTable.isDataTable(table)) {
    $(table).DataTable().destroy(remove);
    $(table).empty();
  }
}

它应该一直在做:

let tables = $("table.some-class-only");
... the rest ...

答案 9 :(得分:0)

我在页面上有多个表并尝试像这样一次初始化它们时出现错误:

$('table').DataTable();

经过多次反复试验,我分别初始化它们,错误消失了:

$("#table1-id").DataTable();
$("#table2-id").DataTable();