Search code examples
datatables-1.10jquery-datatables-rails

Search Datatable after data loaded


I'm using DataTables 1.10 in a Rails 4.2 project. I have the following in a js asset file:

var table = $('#ticket_details').DataTable({
stateSave: true,
deferRender: true,
ajax: $('#ticket_details').data('source'),
"columns": [ 
    { "data": "reference_number" },
    { "data": "location" },
    { "data": "title" },
    { "data": "ticket_category", className: "hidden-xs" },
    { "data": "opened_date" },
    { "data": "last_update", className: "hidden-sm hidden-xs"  },
    { "data": "time", className: "hidden-xs", "orderData": 7 },
    { "data": "decimal_time", "searchable": false, className: "hidden-lg hidden-md hidden-sm hidden-xs hidden"},
    { "data": "open_or_closed", className: "hidden-lg hidden-md hidden-sm hidden-xs hidden"},
    { "data": "assigned_to", className: "hidden-md hidden-sm hidden-xs" },
    { "data": "icons", className: "hidden-sm hidden-xs"  }]} );      

setInterval( function () {
table.ajax.reload( null, false ); }, 60000 );

I'd like to have the table searched on my hidden column which says whether a ticket is Open or Closed. I've two buttons with some JS behind them to switch between open and closed, but I'd like it to default to open tickets

$('#ticket_details').dataTable( {
   "initComplete": function(settings, json) {
    table.columns(8).search("Open").draw();
  }
} );

$('#open_toggle').on('click', function () {
      table.columns(8).search("Open").draw();
});

$('#closed_toggle').on('click', function () {
      table.columns(8).search("Closed").draw();
});

However when you load the page, the table displays everything. Surely if I used drawCallback() and then redrew the table it would just create an infinite loop?


Solution

  • You can do a initial search with search option link

    Some like:

    var table = $('#ticket_details').DataTable({
        "search": {
            "search": "Fred"
        },
        stateSave: true,
        deferRender: true,
        ajax: $('#ticket_details').data('source'),
        "columns": [ 
            { "data": "reference_number" },
            { "data": "location" },
            { "data": "title" },
            { "data": "ticket_category", className: "hidden-xs" },
            { "data": "opened_date" },
            { "data": "last_update", className: "hidden-sm hidden-xs"  },
            { "data": "time", className: "hidden-xs", "orderData": 7 },
            { "data": "decimal_time", "searchable": false, className: "hidden-lg hidden-md hidden-sm hidden-xs hidden"},
            { "data": "open_or_closed", className: "hidden-lg hidden-md hidden-sm hidden-xs hidden"},
            { "data": "assigned_to", className: "hidden-md hidden-sm hidden-xs" },
            { "data": "icons", className: "hidden-sm hidden-xs"  }
        ]
    });