【问题标题】:JQuery Datatables : Cannot read property 'aDataSort' of undefinedJQuery Datatables:无法读取未定义的属性“aDataSort”
【发布时间】:2015-04-11 19:34:03
【问题描述】:

我创建了这个小提琴,它符合我的要求:Fiddle

但是,当我在我的应用程序中使用它时,我在浏览器控制台中收到错误消息 Cannot read property 'aDataSort' of undefined

在我的应用程序中,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"
        }]
            });

    }       

})

【问题讨论】:

  • 请确保您包含的代码与小提琴(不是)和您正在运行的代码相同。同样在小提琴中你有两个 aTargets[0],检查:jsfiddle.net/gL0p0t42
  • 您没有提供实际调用“aDataSort”的来源。
  • 你的意思是html表的id吗?我已经处理好了。让我尝试有一个目标。
  • 我遇到了同样的问题,我发现我按不存在的列号排序.. 我只有 3 列,但我按第五列排序。

标签: javascript jquery jquery-datatables


【解决方案1】:

重要的是您的 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>

【讨论】:

  • 如果我的需求涉及在运行时配置列和所述列的数量怎么办?如何实现上述要求的代码?
  • 这帮助我解决了数据未打印的问题。好吧,它还帮助我解决了我写的数据表的另一个问题"Sort":false,然后它能够​​以降序查看来自控制器的列表为Model.OrderByDescending(x=&gt;x.Action==0).ThenBy(x=&gt;x.Action)
  • &lt;thead&gt; 必须包含 &lt;tr&gt;,然后是 &lt;th&gt;s
  • 这对于标准数据表来说是正确的(并解决了我的问题)。回复:@CSLewis:我不确定静态表,但如果您在运行时配置列以及 ajax 请求,则不需要在 &lt;thead&gt; 中包含任何内容,但您必须在 DataTable() 启动中定义列,例如这个:datatables.net/reference/option/columns.data
【解决方案2】:

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

order: [1, 'asc'],

【讨论】:

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

对我来说,错误在于 DataTables 本身; DataTables 1.10.9 中的排序代码不会检查边界;因此,如果您使用类似的东西

order: [[1, 'asc']]

对于空表,没有行 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;

【讨论】:

  • 感谢您对此问题的详细说明; @hogarth45 above 正确识别了问题/错误,但不太清楚为什么 这实际上是a 问题。两年后我会回复你......显然这还没有得到纠正,甚至没有在官方文档中提到,至少据我所知。
【解决方案4】:

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

$(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 属性。

另外要提的是,当你按列排序时也会出现这个错误 不存在的号码。

【讨论】:

    【解决方案5】:

    在我的情况下,我有

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

    它应该在哪里

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

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

    只是想分享它在未来“可能”帮助某人的地方!

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

      • 已经有其他答案说基本相同的事情。请尽量避免对多年前的问题作出多余的回答。
      【解决方案7】:

      我遇到了这个问题,这是因为另一个脚本正在删除所有表并重新创建它们,但我的表没有被重新创建。在我注意到我的表格在页面上什至不可见之前,我在这个问题上花了很长时间。在初始化 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 ...
      

      【讨论】:

        【解决方案8】:

        因为解析需要将单引号[']切换成双引号["]

        如果您在表上使用 data-order 属性,那么像这样使用它data-order='[[1, "asc"]]'

        【讨论】:

        • 它与 OP 的问题无关,但它适用于我的情况(使用 html 5 数据属性)
        【解决方案9】:

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

        【讨论】:

          【解决方案10】:

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

          $('table').DataTable();
          

          经过大量的试验和错误,我分别初始化它们并且错误消失了:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-11
            • 2016-06-29
            • 2014-08-06
            • 2015-08-01
            相关资源
            最近更新 更多