Uncaught TypeError: Cannot read property 'aDataSort' of undefined

Uncaught TypeError: Cannot read property 'aDataSort' of undefined

我正在研究分页,我正在使用 DataTables 插件, 在某些表上它工作但在某些表上它给出错误:

Uncaught TypeError: Cannot read property 'aDataSort' of undefined

我的页面脚本如下所示:

$(document).ready(function() {
     $('.datatable').dataTable( {
        "scrollY":        "200px",
        "scrollCollapse": true,
        "info":           true,
        "paging":         true
    } );
} );

//HTML代码

<table class="table table-striped table-bordered datatable">
   <thead>
        <tr>
          <th><?php echo lang('date_label')?></th>
          <th><?php echo lang('paid_label')?></th>
          <th><?php echo lang('comments_label');?></th>
        </tr>
   </thead>
   <tbody>
      <?php foreach ($payments as $pay): ?>
      <tr>
        <td><?php echo dateformat($pay['time_stamp'], TRUE);?></td>
        <td><?php echo format_price($pay['amount']);?></td>
        <td><?php echo $pay['note'];?></td>
      </tr>
      <?php endforeach?>
   </tbody>
</table>

不知道问题是怎么来的,我知道这是一个很常见的错误,但我搜索并没有找到任何支持我的问题的东西。
有谁知道解决方案吗?

在您的代码中使用类似于以下内容的代码来禁用对 DataTables 的排序(改编自我的一个使用最新 DataTables 的项目)

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

aoColumns 数组描述了每列的宽度及其 sortable 属性,根据需要调整您自己的 table(列数)。

我遇到了同样的问题,后来在 columnDefs 下的 "targets" 属性 中发现了一个输入错误。见下面的例子,

下面的代码错误,

{
 "name": "firstName",
 "target": [1],
 "visible": false
}

更正 - 未达到目标 's' :(

{
 "name": "firstName",
 "targets": [1],
 "visible": false
}

看起来这个错误发生在导致列未被初始化的情况下。我检查过在这种情况下事件 'preInit.dt' 没有被触发。

希望这对某人有所帮助。

我 运行 使用 KnockoutJS 解决了这个问题,因为当 javascript 试图将 DataTable 应用于它时,列尚未定义。我使用 knockoutJS 的方法是将我的数据绑定代码移动到一个 knockout 模板中,并使用 afterRender 事件将 DataTable 应用到 table。

这是模板 afterRender 事件的 link 到 knockoutJS docs

这是我的数据绑定的样子:

<div data-bind="template: { name: 'schedule-table', data: $data, afterRender: setupDataTable }"></div>

还有一招。在 setupDataTable 函数中,table 仍然没有完全设置,(我试图获取 fixedHeaders 并且宽度还没有设置)。因此,我以 0 毫秒的延迟调用 setTimeout,以便在第一个空闲周期将代码设为 运行。

这是我的设置数据表:

function setupDataTable() {
    setTimeout(function() {
        $("#schedule").DataTable({fixedHeader: true});
    }, 0);
}

希望这可以帮助其他人寻找 knockoutJS 解决方案并 运行 解决我 运行 遇到的同样问题。

这个错误出现在我身上,我相信是因为我的 "mData" 和 "sTitle" 是未定义的。

我在将数据 table 绑定到 .Net GridView 时遇到了类似的问题,如果网格视图没有任何数据并且没有定义 header 值,那么它会抛出:

Uncaught TypeError: Cannot read property 'aDataSort' of undefined

下面是相同的代码。

$("#GridView1").prepend($("<thead</thead>").append($("#GridView1").find("tr:first"))).dataTable();
$("#GridView1").dataTable();

我猜你也面临着同样的问题,因为你也在动态地获取 table header 名称,如果它的结果​​为 null 或空,那么你会收到上述错误.因此,要么在将列绑定到数据 table 时尝试提供列名,要么确保您的 PHP 代码总是 returns table header 的一些数据。