Détecter le changement de page sur DataTable

Avec DataTableje peux commander, lister, faire de la pagination mais je veux détecter quand la pagination change, j'ai vu L'API mais le seul que je peux faire est de changer la page mais pas de détecter ce changement.

31
demandé sur Felix 2011-09-13 23:07:15

11 réponses

Vous pouvez utiliser fnDrawCallback ou fnInfoCallback pour détecter les changements, lorsqu' suivant est cliqué sur les deux d'entre eux sont licenciés.

Mais attention, les changements de page ne sont pas la seule source qui peut déclencher ces rappels.

36
répondu nimcap 2013-09-20 16:41:48

Les événements de pagination sont gérés de cette manière,

 $(document).ready(function() {

    $('#example')
        .on( 'order.dt',  function () { console.log('Order' ); } )
        .on( 'search.dt', function () {console.log('Search' ); } )
        .on( 'page.dt',   function () { console.log('Page' ); } )
        .dataTable();
} );

Documenté sur le site officiel, ici http://www.datatables.net/examples/advanced_init/dt_events.html

La longueur.l'événement dt est déclenché chaque fois que la longueur de la page de la table est modifiée

$('#example').dataTable();

$('#example').on( 'length.dt', function ( e, settings, len ) {
    console.log( 'New page length: '+len );
} );

Http://datatables.net/reference/event/length

Plus d'événements ici

Datatables.net/reference/event/

23
répondu duvanjamid 2014-08-14 03:20:06

Si vous avez une version supérieure à 1.8, Vous pouvez l'utiliser pour accéder aux événements de modification de page:

    $('#myTable').on('page', function () {...} );

Espérons que cela aide!

Mise à jour:

Certains commentaires ont souligné que l'aide .live() au lieu de .sur() a travaillé pour eux. Soyez conscient de ce que vous devriez essayer les deux et voir lequel fonctionne le mieux dans votre situation particulière! (Je crois que cela peut avoir à voir avec votre version sur jQuery, mais veuillez commenter si vous trouvez une autre raison!)

17
répondu streetlight 2013-04-22 18:58:39

Je l'ai fait fonctionner en utilisant:

$('#id-of-table').on('draw.dt', function() {
    // do action here
});
15
répondu Alvin Bakker 2016-01-25 14:33:53
$('#tableId').on('draw.dt', function() {
    //This will get called when data table data gets redrawn to the      table.
});
7
répondu Satish Pokala 2016-02-16 17:47:42

Une approche alternative serait d'enregistrer un gestionnaire d'événements sur le lien de pagination comme ceci:

$("#dataTableID_paginate").on("click", "a", function() { alert("clicked") });

Remplacez "# dataTableID_ " par L'ID de votre table, bien sûr. Et j'utilise la méthode ON de JQuery car c'est la meilleure pratique actuelle.

2
répondu Kevin M 2014-01-05 20:02:29

Essayez d'utiliser delegate au lieu de live comme ici:

$('#link-wrapper').delegate('a', 'click', function() {
  // do something ..
}
2
répondu nirmallimbu 2014-02-18 10:26:57

Ce bon travail

$('#id-of-table').on('draw.dt', function() {
    // do action here
});
2
répondu Kemal Cankurt 2016-11-14 11:06:14

Dans mon cas, la page'.dt ' événement n'a pas fait l'affaire.

J'ai utilisé 'draw.dt ' événement à la place, et cela fonctionne! certains code:

$(document).on('draw.dt', function () {
    //Do something
});

'Tirage.l'événement dt' est déclenché chaque fois que le changement de page datatable est effectué par une recherche, un ordre ou un changement de page.

/***** Informations Supplémentaires * * * * * /

Il y a quelques différences dans la façon dont nous pouvons déclarer l'écouteur d'événement. Vous pouvez l'asigner au 'document' ou à un 'objet html'. Les écouteurs 'document' existeront toujours dans la page et le l'écouteur 'html object' n'existera que si l'objet existe dans le DOM au moment de la déclaration. Certains codes:

/ / écouteur D'événement de Document

$(document).on('draw.dt', function () {
    //This will also work with objects loaded by ajax calls
});

/ / écouteur D'événement D'objet HTML

$("#some-id").on('draw.dt', function () {
    //This will work with existing objects only
});
1
répondu César León 2018-09-11 12:31:30

Cela fonctionne pour faire défiler jusqu'à quand je clique sur Suivant

$('#myTable').on('draw.dt', function() {
    document.body.scrollTop = 0;
    document.documentElement.scrollTop = 0;
});
0
répondu hanna jebesa 2018-03-19 16:25:05

Je n'ai rien trouvé dans L'API, mais une chose que vous pourriez faire est d'attacher un gestionnaire d'événements au paginateur standard et de détecter s'il a changé:

$('.dataTables_length select').live('change', function(){
       alert(this.value);
    });
-1
répondu Nicola Peluchetti 2011-09-14 09:11:45