我正在进行分页,我正在使用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>
不知道问题是怎么来的,我知道这是非常常见的错误,但我搜索并发现什么都不支持我的问题 有谁知道解决方案?
答案 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代码始终返回表头的某些数据。