datatables的“select_none”按钮不能按预期在多选模式下工作
问题描述:
我正在使用here的jquery插件Datatables。datatables的“select_none”按钮不能按预期在多选模式下工作
问题是它不像它应该那样行为。我在TableTools中有两个按钮,Select all和Select none,两者都有默认代码,我没有改变它们。
我也让行可以多选。这里是数据表声明的代码和几乎所有重要的东西。
var oTable;
var gaiSelected = [];
oTable = $('#listeLigne').dataTable({
"sDom": 'T',
"bJQueryUI": true,
"sPaginationType": "full_numbers",
"oLanguage": oLanguage,
"bLengthChange": false,
"iDisplayLength": -1,
"oTableTools": {
"sSwfPath" : "<?= _s("js/DataTables-1.9.4/extras/TableTools/media/swf/copy_csv_xls_pdf.swf") ?>",
"aButtons": [
{
"sExtends": "collection",
"sButtonText": "Sélection",
"aButtons": [
{
"sExtends": "select_all",
"sButtonText": "Toutes"
},
{
"sExtends": "text",
"sButtonText": "Actives"
},
{
"sExtends": "text",
"sButtonText": "Inactives"
},
{
"sExtends": "text",
"sButtonText": "Suspendues"
},
{
"sExtends": "select_none",
"sButtonText": "Aucune"
}
]
},
{
"sExtends": "collection",
"sButtonText": "Sauvegarder",
"aButtons": [ "csv", "xls", "pdf" ]
},
{
"sExtends": "print",
"sButtonText": "Imprimer"
}
]
},
"fnRowCallback": function(nRow, aData, iDisplayIndex) {
if (jQuery.inArray(aData[0], gaiSelected) != -1)
{
$(nRow).addClass('row_selected');
}
return nRow;
}
});
$('#listeLigne tbody tr').live('click', function() {
var aData = oTable.fnGetData(this);
var iId = aData[0];
if (jQuery.inArray(iId, gaiSelected) == -1)
{
gaiSelected[gaiSelected.length++] = iId;
}
else
{
gaiSelected = jQuery.grep(gaiSelected, function(value) {
return value != iId;
});
}
$(this).toggleClass('DTTT_selected');
});
会发生什么情况是,如果我点击全选,它选择他们所有,然后如果我点击选择无,它取消选择一切。但是,如果我点击其中的一部分并将它们选中,然后按下选择无,则不会发生任何事情。然后如果我按下选择所有,然后选择它没有工作。
我一直在寻找数据表的内部代码,尝试了很多不同的解决方案(即使我没有看到许多人遇到同样的问题)。
请求任何您可能需要的其他信息。 每一点信息和/或帮助表示赞赏。谢谢。
答
最后我换成上面这个代码:
oTable = $('#listeLigne').dataTable({
"sDom": 'T',
"bJQueryUI": true,
"sPaginationType": "full_numbers",
"oLanguage": oLanguage,
"bLengthChange": false,
"iDisplayLength": -1,
"oTableTools": {
"sRowSelect": "multi",
"sSwfPath" : "<?= _s("js/DataTables-1.9.4/extras/TableTools/media/swf/copy_csv_xls_pdf.swf") ?>",
"aButtons": [
{
"sExtends": "select_none",
"sButtonText": "Aucune"
},
{
"sExtends": "collection",
"sButtonText": "Sélection",
"aButtons": [
{
"sExtends": "select_all",
"sButtonText": "Toutes"
},
{
"sExtends": "text",
"sButtonText": "Actives"
},
{
"sExtends": "text",
"sButtonText": "Inactives"
},
{
"sExtends": "text",
"sButtonText": "Suspendues"
},
{
"sExtends": "select_none",
"sButtonText": "Aucune"
}
]
},
{
"sExtends": "collection",
"sButtonText": "Sauvegarder",
"aButtons": [ "csv", "xls", "pdf" ]
},
{
"sExtends": "print",
"sButtonText": "Imprimer"
}
]
}
});
$('#listeLigne tbody tr').live('click', function() {
var oTT = TableTools.fnGetInstance('listeLigne');
oTT.fnSelect(this);
});
因此,基本上,第一个是使用谷歌搜索“的数据表中选择行”,让你做它的标准方式获得的方法。但是因为我使用的是TableTools,所以它不同。在这种情况下,必须使用TableTools的API。
请注意,.live功能不完整,因为它只会选择,但你明白我的意思。
DataTables的文档非常完整,但很难找到有时甚至过时的东西。