首页 文章

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

提问于
浏览
7

我正在进行分页,我正在使用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>

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

4 回答

  • 5

    在你的代码中使用类似下面的内容来禁用 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

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

    错误代码如下,

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

    更正 - 在目标中错过了's':(

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

    看起来当导致列未初始化的某些内容时会发生此错误 . 在这种情况下,我检查了事件'preInit.dt'没有被触发 .

    希望这有助于某人 .

  • 9

    我使用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解决方案并遇到我遇到的同样问题 .

  • 2

    这个错误出现在我面前,我相信因为我的“mData”和“sTitle”未定义 .

相关问题