我正在使用来自here的jquery插件数据表。
问题在于它不应该像它应该的行为。 TableTools中有2个按钮,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');
} );
如果我点击全选,它会全部选择,然后如果我点击选择无,它会取消选择所有内容。但是,如果我单击其中一些并将其选中,然后按“选择无”,则不会发生任何事情。然后,如果我按下选择全部,然后选择它,它确实有效。
我一直在研究数据表的内部代码,尝试了很多来自网络的不同解决方案(尽管我没有看到很多人遇到同样的问题)。
请求您可能需要的任何其他信息。 感谢每一点信息和/或帮助。谢谢。
答案 0 :(得分:0)
最后我替换了上面的代码:
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);
} );
基本上,第一个是使用通过搜索Google“datatables select rows”找到的方法,它为您提供了标准的方法。但是,由于我使用的是TableTools,因此它有所不同。在这种情况下,必须使用TableTools的API。
请注意.live函数不完整,因为它只会选择,但你明白我的意思。
DataTables的文档非常完整,但有时很难找到并且有时会过时。