0

I'm using dataTables (https://datatables.net) and trying to do a responsive page number, I need this:

Desktop: first prev 1 2 3 4 5 next last

Mobile: first prev 1 2 3 next last

Actually with my code I get this on mobile, nothing change: first prev 1 2 3 4 5 next last

This is my code:

$(window).resize(function () {
   if ($(this).outerWidth() < 768){
      // change the dataTable pageLength in here
      $.fn.DataTable.ext.pager.numbers_length = 3;     
   } else {
      // default pageLength
      $.fn.DataTable.ext.pager.numbers_length = 5;
   }
});

3 Answers3

0

Datatables Pagination Pager Adjust numbers length

A good alternative would be to pass the call every time you resize the window, thus avoiding errors with the datatables

// Adjust Pagination number page
$.dt_adjust_pager_number = function(dtable){
    var ipag = $.fn.DataTable.ext.pager.numbers_length,i,
      w = document.documentElement.clientWidth;
    // window.screen.width -> This only tends to identify that the customer at a wide screen is not advisable to use it for a responsive 
    if (w < 768) {
        i = 4;
    } else if (w <= 1024) {
        i = 5;
    } else if ( w > 1024) {
        i = 7;
    }
    //console.log(ipag,i);
    if (i && ipag != i ){
        $.fn.DataTable.ext.pager.numbers_length = i;
        if (typeof dtable == 'object'){
            dtable.draw( 'page' );
            //Other alternatives:
            //dtable.columns.adjust().draw( 'page' );
            //dtable.page(0).draw( 'page' );
        }
    }
};
// init ready window
$.dt_adjust_pager_number();

var osTable = $('#table').DataTable(); // $.fn.dataTable.tables();

$(window).resize(function () {
    if (window.tmdoit){
        window.clearTimeout(window.tmdoit);
    }
    window.tmdoit = window.setTimeout(function(){
        $.dt_adjust_pager_number(osTable);
    },400);
});
Clary
  • 544
  • 1
  • 7
  • 8
-1

There is a Responsive extension for datatables. You can also try the solutions Here.

reasonet
  • 145
  • 12
-1

I needed the same solution and solved it only by redrawing the page area.

https://datatables.net/reference/api/draw()

let $landingPaginationTable = $('.landing-table.pagination-table');

$(window).resize(() => {
    if (window.screen.width < 768) {
        $.fn.DataTable.ext.pager.numbers_length = 3;
    } else if (window.screen.width <= 1024) {
        $.fn.DataTable.ext.pager.numbers_length = 5;
    } else {
        $.fn.DataTable.ext.pager.numbers_length = 7;
    }

    $landingPaginationTable.DataTable().draw('page');
});
General Grievance
  • 4,555
  • 31
  • 31
  • 45