未捕获的类型错误:无法读取未定义的属性“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的排序功能,你能把整个相关代码贴出来吗? 可能某处语法错误..提供相关代码.. 是的, 的语法错误很可能是问题 我已经提供了我的代码,我留下的是我的动态表格related question 没有答案
【参考方案1】:

在您的代码中使用类似以下内容来禁用对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”

为啥我会收到“未捕获的类型错误:无法读取未定义的属性 'body'”?

反应和流星“未捕获的类型错误:无法读取未定义的属性'createElement'”