Détecter le changement de page sur DataTable
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.
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/
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!)
Je l'ai fait fonctionner en utilisant:
$('#id-of-table').on('draw.dt', function() {
// do action here
});
$('#tableId').on('draw.dt', function() {
//This will get called when data table data gets redrawn to the table.
});
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.
Essayez d'utiliser delegate au lieu de live comme ici:
$('#link-wrapper').delegate('a', 'click', function() {
// do something ..
}
Ce bon travail
$('#id-of-table').on('draw.dt', function() {
// do action here
});
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
});
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;
});
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);
});