未捕获的类型错误:无法读取未定义的属性“aDataSort”
Posted
技术标签:
【中文标题】未捕获的类型错误:无法读取未定义的属性“aDataSort”【英文标题】:Uncaught TypeError: Cannot read property 'aDataSort' of undefined 【发布时间】:2015-08-01 14:29:11 【问题描述】:我正在处理分页,我正在使用DataTables 插件, 在某些表上它可以工作,但在某些表上它会出错:
我的页面脚本如下所示:
$(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
的排序(改编自我的一个使用最新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
属性,根据您自己的表(列数)的需要进行调整。
【讨论】:
Wao 解决了我的问题,接受您的回答。【参考方案2】:我遇到了同样的问题,后来在 columnDefs 下的“targets”属性中发现了一个输入错误。见下面的例子,
以下代码错误,
"name": "firstName",
"target": [1],
"visible": false
更正 - 目标中遗漏了 's' :(
"name": "firstName",
"targets": [1],
"visible": false
看起来这个错误是在导致列未初始化的情况下发生的。我检查了在这种情况下没有触发事件“preInit.dt”。
希望这对某人有所帮助。
【讨论】:
【参考方案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 解决方案并遇到与我遇到的相同问题。
【讨论】:
这里使用 AngularJS 和 angular-datatables 出现类似错误:我忘记将属性“dt-columns”添加到 datatables 指令。谢谢!【参考方案4】:这个错误出现在我面前,我相信是因为我的“mData”和“sTitle”没有定义。
【讨论】:
【参考方案5】:我在将数据表绑定到.Net GridView
时遇到了类似的问题,如果网格视图没有任何数据并且没有定义标题值,那么它就会抛出:
Uncaught TypeError: Cannot read property 'aDataSort' of undefined
下面是相同的代码。
$("#GridView1").prepend($("<thead</thead>").append($("#GridView1").find("tr:first"))).dataTable();
$("#GridView1").dataTable();
我猜你也面临同样的问题,因为你也在动态地获取表头名称,如果它的结果为 null 或空,那么你就会得到提到的错误。因此,您要么尝试在将其绑定到数据表时给出列名,要么确保您的 PHP 代码始终为表头返回一些数据。
【讨论】:
以上是关于未捕获的类型错误:无法读取未定义的属性“aDataSort”的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的类型错误:无法读取未定义的属性 toLowerCase
JQuery:未捕获的类型错误:无法读取未定义的属性“调用”
NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)
未捕获的类型错误:无法读取文本字段上未定义错误的属性“toLowerCase”