在多选模式下,数据表的“select_none”按钮无法正常工作

时间:2013-03-14 20:00:08

标签: javascript jquery datatables

我正在使用来自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');
            } );

如果我点击全选,它会全部选择,然后如果我点击选择无,它会取消选择所有内容。但是,如果我单击其中一些并将其选中,然后按“选择无”,则不会发生任何事情。然后,如果我按下选择全部,然后选择它,它确实有效。

我一直在研究数据表的内部代码,尝试了很多来自网络的不同解决方案(尽管我没有看到很多人遇到同样的问题)。

请求您可能需要的任何其他信息。 感谢每一点信息和/或帮助。谢谢。

1 个答案:

答案 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的文档非常完整,但有时很难找到并且有时会过时。