désactiver la pagination s'il n'y a qu'une seule page dans datatables

J'implémente datatbales et selon mes besoins, la plupart des choses ont été résolues sauf le problème de pagination. Dans mon cas, pour chaque fois que la navigation de pagination s'affiche. Je veux désactiver la navigation de pagination s'il n'y a qu'une seule page du tout.Comment faire? Mon code est comme:

JS

<script>
  function fnFilterColumn(i) {

    $('#example').dataTable().fnFilter(
      $("#col" + (i + 1) + "_filter").val(),
      i
    );
  }
  $(document).ready(function() {


    $('#example').dataTable({
      "bProcessing": true,
      "sAjaxSource": "datatable-interestdb.php",
      "bJQueryUI": true,
      "sPaginationType": "full_numbers",
      "sDom": 'T<"clear">lfrtip',
      "oTableTools": {
        "aButtons": [

          {
            "sExtends": "csv",
            "sButtonText": "Save to CSV"
          }
        ]
      },
      "oLanguage": {
        "sSearch": "Search all columns:"
      }


    });


    $("#example").dataTable().columnFilter({
      aoColumns: [
        null,
        null,
        null,
        null
      ]
    });


    $("#col1_filter").keyup(function() {
      fnFilterColumn(0);
    });

  });
</script>

HTML

<table cellpadding="3" cellspacing="0" border="0" class="display userTable" aria-describedby="example_info">

  <tbody>
    <tr id="filter_col1">
      <td>Interest:</td>
      <td>
        <input type="text" name="col1_filter" id="col1_filter">
      </td>
    </tr>
  </tbody>
</table>


<table width="100%" border="0" align="center" cellpadding="2" cellspacing="1" class="form_table display" id="example">

  <thead>
    <tr>
      <th class="sorting_asc" width="25%">Interest</th>
      <th width="25%">Name</th>
      <th width="25%">Email</th>
      <th width="25%">Contact No</th>
    </tr>
  </thead>
  <tbody>

    <tr>
      <td colspan="4" class="dataTables_empty">Loading data from server</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </tfoot>


</table>
50
demandé sur Mohammad Faisal 2012-06-15 16:41:19

17 réponses

Vous devez les cacher dynamiquement je pense, vous pouvez utiliser fnDrawCallback()

$('#example').dataTable({
    "fnDrawCallback": function(oSettings) {
        if ($('#example tr').length < 11) {
            $('.dataTables_paginate').hide();
        }
    }
});​

EDIT - une autre façon trouvée ici pourrait être

"fnDrawCallback":function(){
      if ( $('#example_paginate span span.paginate_button').size()) {
      $('#example_paginate')[0].style.display = "block";
     } else {
     $('#example_paginate')[0].style.display = "none";
   }
}
35
répondu Nicola Peluchetti 2014-12-31 11:33:23

En S'appuyant sur la réponse de Nicola, vous pouvez utiliser le rappel fnDrawCallback() et l'objet oSettings pour masquer la pagination de la table après qu'elle a été dessinée. Avec oSettings, vous n'avez pas besoin de savoir quoi que ce soit sur les paramètres de la table (enregistrements par page, sélecteurs spécifiques à la table, etc.)

Ce qui suit vérifie si la longueur d'affichage par page est supérieure au total des enregistrements et masque la pagination si elle est:

$('#your_table_selector').dataTable({
    "fnDrawCallback": function(oSettings) {
        if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) {
            $(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
        }
    }
});

Documentation

67
répondu sina 2012-09-22 18:04:06

Voir mon plugin de fonctionnalités conditionalPaging .

Utilisation:

$('#myTable').DataTable({
    conditionalPaging: true
});

or

$('#myTable').DataTable({
    conditionalPaging: {
        style: 'fade',
        speed: 500 // optional
    }
});
23
répondu mjhasbach 2015-04-15 00:31:30

C'est l'approche correcte lorsque vous travaillez dans V1. 10 + de jQuery Datatables. Le processus est généralement le même que dans les versions précédentes, mais les noms d'événements et les méthodes API sont légèrement différents:

$(table_selector).dataTable({
    preDrawCallback: function (settings) {
        var api = new $.fn.dataTable.Api(settings);
        var pagination = $(this)
            .closest('.dataTables_wrapper')
            .find('.dataTables_paginate');
        pagination.toggle(api.page.info().pages > 1);
    }
});

Documentation

14
répondu mark.monteiro 2016-08-07 18:17:08

À l'Aide de @sina suggestion ci-dessus, y compris le correctif mentionné par @GuiSim.

Ajoutez ce code à votre demande d'initialisation datatables.

JQUERY

    "fnDrawCallback": function (oSettings) {
      var pgr = $(oSettings.nTableWrapper).find('.dataTables_paginate')
      if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) {
        pgr.hide();
      } else {
        pgr.show()
      }
    }

Ou mieux encore remplacer

"fnDrawCallback": null 

Dans vos datatables.js pour appliquer le code à l'échelle du site.

3
répondu DreamTeK 2014-09-29 07:51:40

Je préfère la solution de @ sina. Du bon travail.

Mais mon Un vient avec quelques améliorations nécessaires. @sina a oublié la partie else pour afficher à nouveau la pagination si nécessaire. Et j'ai ajouté la possibilité de définir l'option all dans le lengthMenu comme suit:

jQuery('#your_table_selector').dataTable({
    "lengthMenu": [[10, 25, 50, 100, 250, 500, -1], [10, 25, 50, 100, 250, 500, "All"]],

    "fnDrawCallback": function(oSettings) {
        if (oSettings._iDisplayLength == -1
            || oSettings._iDisplayLength > oSettings.fnRecordsDisplay())
        {
            jQuery(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
        } else {
            jQuery(oSettings.nTableWrapper).find('.dataTables_paginate').show();
        }
    }
});
2
répondu algorhythm 2015-04-02 01:17:14

Ce n'est pas directement possible car DataTables ne prend pas en charge l'activation et la désactivation des fonctionnalités sont exécutées. Cependant, ce que vous pouvez faire est d'utiliser la fonction fnDrawCallback() pour vérifier s'il n'y a qu'une seule page, et si c'est le cas, masquer les contrôles de pagination.

1
répondu Shiven 2012-06-15 12:46:25

Ajoutez simplement ce qui suit à votre feuille de style:

.dataTables_paginate .paginate_button.disabled {
    display: none;
}
1
répondu Nikita 2015-08-19 13:32:41

Vous pouvez également suivre cette voie.

"fnDrawCallback":function(){
      if(jQuery('table#table_id td').hasClass('dataTables_empty')){
            jQuery('div.dataTables_paginate.paging_full_numbers').hide();
      } else {
            jQuery('div.dataTables_paginate.paging_full_numbers').show();
      }
 }

Cela a fonctionné pour moi.

1
répondu sreekanth kuriyala 2015-08-25 06:26:51

J'ai essayé de rendre sPaginationType aussi dynamique dans datatable pour chaque entrée mais je ne peux pas trouver la solution appropriée pour cela mais ce que j'ai fait était

"fnDrawCallback": function(oSettings) {
    $('select[name="usertable_length"]').on('change', function(e) {
        var valueSelected  = this.value;
        if ( valueSelected < 10 ) {
            $('.dataTables_paginate').hide();
        } else {
            $('.dataTables_paginate').show();
        }
    });
},
1
répondu Kamal Kishor 2016-05-31 07:29:25
$('#dataTable_ListeUser').DataTable( {

    //usual pager parameters//

    "drawCallback": function ( settings ) {

    /*show pager if only necessary
    console.log(this.fnSettings());*/
    if (Math.ceil((this.fnSettings().fnRecordsDisplay()) / this.fnSettings()._iDisplayLength) > 1) {
        $('#dataTable_ListeUser_paginate').css("display", "block");     
    } else {                
        $('#dataTable_ListeUser_paginate').css("display", "none");
    }

    }
   });
1
répondu Matoeil 2016-07-25 14:01:37

JQuery - J'ai essayé avec les options suivantes, cela a fonctionné pour moi

    $("#your_tbl_selector").dataTable({
    "pageLength": 3,
    "autoWidth": false,
    "fixedHeader": {"header": false, "footer": false},
    "columnDefs": [{ "width": "100%", "targets": 0 }],
    "bPaginate": true,
    "bLengthChange": false,
    "bFilter": true,
    "bInfo": false,
    "bAutoWidth": false,
    "oLanguage": {
     "oPaginate": {
       "sNext": "",
       "sPrevious": ""
     }
   },
   "fnDrawCallback": function(oSettings) {                 
        if (oSettings._iDisplayLength >= oSettings.fnRecordsDisplay()) {
          $(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
        }
    }
});

Vue De Sortie DataTable

1
répondu Aravind 2016-11-20 16:02:13

Cette fonction de rappel fonctionne génériquement avec n'importe quel datatable sans avoir à coder en dur l'ID de la table:

$('.data-table').dataTable({
    fnDrawCallback: function(oSettings) {
       if(oSettings.aoData.length <= oSettings._iDisplayLength){
         $(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
       }
    }
});
1
répondu Agu Dondo 2017-04-13 02:23:10

Si vos données ne sont pas dynamiques, c'est-à-dire que le serveur génère une table HTML qui est ensuite améliorée par des DataTables, vous pouvez rendre l'option de pagination sur le serveur (j'utilise razor).

$("#results").dataTable({
  paging: @(Model.ResultCount > Model.PageSize ? "true" : "false"),
  // more ...
});
0
répondu Julian Lettner 2015-07-30 16:52:11

Je sais que c'est un vieux post, mais pour ceux d'entre nous qui utiliseront ceci, et qui ont un TOC comme moi, un changement est nécessaire.

Modifiez l'instruction if,

if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) 

À

if (oSettings._iDisplayLength >= oSettings.fnRecordsDisplay()) 

Avec ce petit changement, vous verrez les boutons de pagination pour les longueurs d'enregistrements supérieures à 10, 25, 50, 100 au lieu de présenter les boutons de pagination avec seulement 10 enregistrements, techniquement 10, 25, etc records est toujours une vue d'une page.

0
répondu Ray 2015-08-19 14:23:35

Voici ma solution, cela fonctionne aussi si vous avez plusieurs tables sur la même page. Il empêche la colision par exemple (la table a doit avoir une pagination, et B ne doit pas).

TableId dans mon code n'est jamais indéfini. Si vous n'avez pas défini D'ID pour votre table, dataTable le fera pour vous en ajoutant quelque chose comme 'DataTables_Table_0'

    fnDrawCallback: function (oSettings) {
        if ($(this).DataTable().column(0).data().length <= oSettings._iDisplayLength) {
            var tableId = $(this).attr('id');
            $('#' + tableId + '_paginate').hide();
        }
    }
0
répondu Yacine 2017-05-15 14:03:44

Cela a Résolu mes problèmes:

.dataTables_paginate .disabled {
   display:none;
}   
dataTables_paginate .disabled + span {
   display:none;
}   

J'espère que cela vous aidera tous

0
répondu Nageshwar Jha 2018-01-11 05:50:43