使用数据表按两列排序(无法读取未定义的 属性 'sType')
Sort by two columns with dataTables (Cannot read property 'sType' of undefined)
我正在使用 dataTables plugin 来处理列的排序。
尝试应用 multi-column ordering 我在控制台中收到以下错误:
Uncaught TypeError: Cannot read property 'sType' of undefined
由于文档在这方面的解释不是很清楚,并且没有包含太多关于此功能的示例,所以我不知道问题出在哪里。
$('#demo').DataTable({
paging: false,
ordering: true,
columnDefs: [{
orderData: [[0, 'asc'],[1, 'asc']],
targets: [1]
}]
});
原因
选项columns.orderData应该是索引数组,见下文:
$('#demo').DataTable({
paging: false,
ordering: true,
columnDefs: [{
orderData: [0, 1],
targets: [1]
}]
});
请参阅 updated JSFiddle 进行演示。
尽管 多列排序 示例页面提到您可以使用 [ [0,'asc'], [1,'asc'] ]
,但是它与 columns.orderData 的手册相矛盾。
似乎是代码或手册的问题。通过查看 DataTables 源代码,我发现它只接受没有排序方法的索引数组。
详情
针对此问题为 jQuery DataTables 创建了一个 new issue #591。
现在是 confirmed that the issue was with incorrect statement on Multi-column ordering 示例页面。
解决方法
解决方法是绑定到 order event and re-order the table as you want with 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 进行演示。
似乎多列顺序可以在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
]
});
看到它工作 here。
我正在使用 dataTables plugin 来处理列的排序。
尝试应用 multi-column ordering 我在控制台中收到以下错误:
Uncaught TypeError: Cannot read property 'sType' of undefined
由于文档在这方面的解释不是很清楚,并且没有包含太多关于此功能的示例,所以我不知道问题出在哪里。
$('#demo').DataTable({
paging: false,
ordering: true,
columnDefs: [{
orderData: [[0, 'asc'],[1, 'asc']],
targets: [1]
}]
});
原因
选项columns.orderData应该是索引数组,见下文:
$('#demo').DataTable({
paging: false,
ordering: true,
columnDefs: [{
orderData: [0, 1],
targets: [1]
}]
});
请参阅 updated JSFiddle 进行演示。
尽管 多列排序 示例页面提到您可以使用 [ [0,'asc'], [1,'asc'] ]
,但是它与 columns.orderData 的手册相矛盾。
似乎是代码或手册的问题。通过查看 DataTables 源代码,我发现它只接受没有排序方法的索引数组。
详情
针对此问题为 jQuery DataTables 创建了一个 new issue #591。
现在是 confirmed that the issue was with incorrect statement on Multi-column ordering 示例页面。
解决方法
解决方法是绑定到 order event and re-order the table as you want with 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 进行演示。
似乎多列顺序可以在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
]
});
看到它工作 here。