使用dataTables排序两列(无法读取未定义的属性'sType')

时间:2015-07-06 14:45:17

标签: javascript datatables

我正在使用dataTables plugin来处理列的排序。

尝试应用multi-column ordering我在控制台中收到以下错误:

  

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

由于文档在这方面不是很明确,并且没有包含太多此功能的示例,我不知道问题出在哪里。

Reproduction of the problem

$('#demo').DataTable({
    paging: false,
    ordering: true,
    columnDefs: [{
        orderData: [[0, 'asc'],[1, 'asc']],
        targets: [1]
    }]
});

2 个答案:

答案 0 :(得分:4)

<强>原因

选项columns.orderData应该是索引数组,见下文:

$('#demo').DataTable({
    paging: false,
    ordering: true,
    columnDefs: [{
        orderData: [0, 1],
        targets: [1]
    }]
});

请参阅updated JSFiddle进行演示。

虽然Multi-column ordering示例页面提到您可以使用[ [0,'asc'], [1,'asc'] ],但它与columns.orderData的手册相矛盾。

似乎是代码或手册的问题。通过查看DataTables源代码,我发现它只接受没有排序方法的索引数组。

<强>详情

为jQuery DataTables创建了一个关于此问题的new issue #591

现在confirmed问题是Multi-column ordering示例页面上的错误陈述。

解决方法

解决方法是绑定到order事件,并根据需要使用order()方法重新排序表,除了列索引之外还接受排序方法。

var table = $('#demo').DataTable({
    paging: false,
    ordering: true
});

$('#demo').on('order.dt', function(){
   var order = table.order();              
   if(order[0][0] === 1){
      table.order([0, 'asc'],[1, 'asc']).draw();
   }
});

请参阅this JSFiddle进行演示。

答案 1 :(得分:1)

似乎多列顺序可以在dataTables中使用:

  • 默认启用多重排序
  • 具有固定升序的第一列忽略用户输入
  • 用户可以选择排序方向的第二列
  • 无需按住Shift键点击以保持多个订单的合作

这总结了所有过程:

    $('#demo').DataTable({
    ordering: true,         
    order:[[0, 'asc'],[1, 'asc']], // Set initial order
    orderFixed: [ 0, 'asc' ], // Always use the first column for ordering
    "columnDefs": [
    { "orderable": false, "targets": 0 } // Don't let the first column order to be changed
      ]
    });

看到它正常工作MSVC documentation