未捕获的TypeError:无法读取未定义的属性“aDataSort”

时间:2015-05-20 11:13:57

标签: javascript jquery jquery-datatables

我正在进行分页,我正在使用DataTables插件, 在一些表上它可以工作,但在某些表上它会出错:

  

未捕获的TypeError:无法读取未定义的属性“aDataSort”

我的页面脚本如下:

$(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>

不知道问题是怎么来的,我知道这是非常常见的错误,但我搜索并发现什么都不支持我的问题 有谁知道解决方案?

5 个答案:

答案 0 :(得分:9)

在代码中使用类似以下的内容来禁用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属性,根据您自己的表(数量)列的需要进行调整。

答案 1 :(得分:5)

我遇到了同样的问题,后来在&#34;目标&#34;中发现了打字错误。 columnDefs下的属性。见下面的例子,

下面的错误代码,

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

更正 - 错过&#39;在目标:(

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

当导致列未初始化的内容时,看起来会发生此错误。我检查了那个事件&#39; preInit.dt&#39;在这种情况下不被解雇。

希望这有助于某人。

答案 2 :(得分:3)

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

以下是模板afterRender事件的knockoutJS docs链接。

以下是我的数据绑定:

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

还有一个伎俩。在setupDataTable函数中,表仍然没有完全设置,(我试图获得fixedHeaders并且宽度尚未设置)。所以我用0毫秒的延迟调用setTimeout来让代码在第一个空闲周期运行。

这是我的setupDataTable:

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

希望这有助于其他人寻找knockoutJS解决方案并遇到我遇到的同样问题。

答案 3 :(得分:1)

这个错误出现在我身上,我相信因为我的&#34; mData&#34;和&#34; sTitle&#34;未定义。

答案 4 :(得分:0)

当将数据表绑定到.Net GridView时,如果网格视图没有任何数据并且没有定义标头值,则抛出了类似的问题:

Uncaught TypeError: Cannot read property 'aDataSort' of undefined

下面是相同的代码。

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

我猜您也面临着同样的问题,因为您还动态获取表头名称,并且如果其结果为null或为空,那么您将遇到上述错误。因此,要么在将列绑定到数据表时尝试提供列名,要么确保您的PHP代码始终返回表头的某些数据。