skip to Main Content

I am using jQuery DataTables, I added select inputs ( bootstrap-select ) under the header table to filter my data.

When I used bootstrap selectpicker, the datatables was hidding the dropdown and the select couldn’t pop up. I used

.dataTables_scrollHead { overflow: visible !important; }

and it fixed the pop up, now the select options are not hidden by datatables but it messed up with the header. it’s now fixed and doesn’t move when scrolling horizontally even I specified "scrollX": true. Only the footer and body are scrolling on X axis.

Any suggestions please what is causing the issue ? Thank you very much.

$(document).ready(function() {

// clone tr
$('#liveTable thead tr').clone(true).appendTo( '#liveTable thead' );
// set id to the cloned tr
$('#liveTable thead tr:eq(1)').attr('id', 'selectFilter');
// add select to each th in the cloned tr 
$('#liveTable thead tr:eq(1) th').each( function (i) {
 $(this).html( '<select class="added"><option value="">All</option></select>' ); 
 } );

    var liveTable = $('#liveTable').DataTable( {
    "processing": true,
    "serverSide": true,
    "ajax": "https://api.npoint.io/49da61bee945ca8aa32a",
    "columns": [
            {"data": "COUNTRY_NAME"},
            {"data": "COUNTRY_CODE"},
            {"data": "TERRITORY"},
            {"data": "MARKET"},
            {"data": "REGION"}, 
            {"data": "CustomerName"},
            {"data": "STATUS"},
            {"data": "OrderQty"},
            {"data": "Crncy"},
            {"data": "LocalPrice"},
            {"data": "Dollarprice"},
            {"data": "Europrice"},
            {"data": "Poundprice"}, 
            {"data": "ShipTo"}, 
            {"data": "ShipToName"}, 
            {"data": "ShipToHouseStreetNumber"}, 
            {"data": "ShipToCity"},
            {"data": "ShipToPostalCode"},
            {"data": "ShipToRegion"}, 
            {"data": "ShipToTelephone"}, 
            {"data": "ShipToEmail"}, 
            {"data": "ShipToCountry"}              
            ],
    
    
        "orderCellsTop": true,
    "scroller": true,
    "scrollY": 400,
    "scrollX": true,
    "scrollCollapse": true,
    "paging": false,
    "searching": false,

    initComplete: function () { 
    
    var k = 0;
    // loop through each select inside my cloned tr
    $('#liveTable thead tr:eq(1) th .added').each(function() {  

    // get unique values in the current column
    var unique = liveTable.columns( k ).data().eq( 0 ).unique().sort();
        
    var option = '';
    // loop through unique array to add all items as options
    for (var i=0;i<unique.length;i++){
       option += '<option value="'+ unique[i] + '">' + unique[i] + '</option>';

    }
        // append all options inside current select
    $("tr:eq(1) th:eq(" + k + ") .added").append(option);
    //apply bootstrap select plugin
    $("tr:eq(1) th:eq(" + k + ") .added").selectpicker();
    // increment k so that next select will check next column
    k++;

          });

        }        
} );


} );
thead select {
width: 100%; }
    
.dataTables_scrollHead{
  overflow: visible !important;
  width: 100%;
 }
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css" rel="stylesheet">
<link href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.17/css/bootstrap-select.min.css">

<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.17/js/bootstrap-select.min.js"></script>


           <table id="liveTable" class="table table-bordered" style="width:100%">
            
        <thead>
            <tr>
            <th>COUNTRY_NAME</th>
            <th>COUNTRY_CODE</th>
            <th>TERRITORY</th>
            <th>MARKET</th>
            <th>REGION</th>
            <th>CustomerName</th>
            <th>STATUS</th>
            <th>OrderQty</th>
            <th>Crncy</th>
            <th>LocalPrice</th>
            <th>Dollarprice</th>
            <th>Europrice</th>
            <th>Poundprice</th>
            <th>Ship To</th>
            <th>Ship To Name</th>
            <th>Ship To House/ Street Number</th>
            <th>Ship To City</th>
            <th>Ship To Postal Code</th>
            <th>Ship To Region</th>
            <th>Ship To Telephone</th>
            <th>Ship To Email</th>
            <th>Ship To Country</th>
            </tr>
        </thead>

        <tfoot>
            <tr>
           <th>COUNTRY_NAME</th>
            <th>COUNTRY_CODE</th>
            <th>TERRITORY</th>
            <th>MARKET</th>
            <th>REGION</th>
            <th>CustomerName</th>
            <th>STATUS</th>
            <th>OrderQty</th>
            <th>Crncy</th>
            <th>LocalPrice</th>
            <th>Dollarprice</th>
            <th>Europrice</th>
            <th>Poundprice</th>
            <th>Ship To</th>
            <th>Ship To Name</th>
            <th>Ship To House/ Street Number</th>
            <th>Ship To City</th>
            <th>Ship To Postal Code</th>
            <th>Ship To Region</th>
            <th>Ship To Telephone</th>
            <th>Ship To Email</th>
            <th>Ship To Country</th>

            </tr>
        </tfoot>
        
    </table>

2

Answers


  1. Chosen as BEST ANSWER

    I found a solution i hope it will be useful for someone in future. i removed

    .dataTables_scrollHead{
      overflow: visible !important;
      width: 100%;
     }
    

    I keep datatables css as it is and in bootstrap-select data-container="body". This is useful if the select element is inside an element with overflow: hidden so my select should be as below

    <select class="added" data-container="body"><option value="">All</option></select>
    

  2. I am added outer div for this table & class it table-responsive removed jQuery collapse X & Y scroll now it scroll with header

    $(document).ready(function() {
    
    // clone tr
    $('#liveTable thead tr').clone(true).appendTo( '#liveTable thead' );
    // set id to the cloned tr
    $('#liveTable thead tr:eq(1)').attr('id', 'selectFilter');
    // add select to each th in the cloned tr 
    $('#liveTable thead tr:eq(1) th').each( function (i) {
     $(this).html( '<select class="added"><option value="">All</option></select>' ); 
     } );
    
        var liveTable = $('#liveTable').DataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": "https://api.npoint.io/49da61bee945ca8aa32a",
        "columns": [
                {"data": "COUNTRY_NAME"},
                {"data": "COUNTRY_CODE"},
                {"data": "TERRITORY"},
                {"data": "MARKET"},
                {"data": "REGION"}, 
                {"data": "CustomerName"},
                {"data": "STATUS"},
                {"data": "OrderQty"},
                {"data": "Crncy"},
                {"data": "LocalPrice"},
                {"data": "Dollarprice"},
                {"data": "Europrice"},
                {"data": "Poundprice"}, 
                {"data": "ShipTo"}, 
                {"data": "ShipToName"}, 
                {"data": "ShipToHouseStreetNumber"}, 
                {"data": "ShipToCity"},
                {"data": "ShipToPostalCode"},
                {"data": "ShipToRegion"}, 
                {"data": "ShipToTelephone"}, 
                {"data": "ShipToEmail"}, 
                {"data": "ShipToCountry"}              
                ],
        
        
            "orderCellsTop": true,
        "scroller": true,  
        "paging": false,
        "searching": false,
    
        initComplete: function () { 
        
        var k = 0;
        // loop through each select inside my cloned tr
        $('#liveTable thead tr:eq(1) th .added').each(function() {  
    
        // get unique values in the current column
        var unique = liveTable.columns( k ).data().eq( 0 ).unique().sort();
            
        var option = '';
        // loop through unique array to add all items as options
        for (var i=0;i<unique.length;i++){
           option += '<option value="'+ unique[i] + '">' + unique[i] + '</option>';
    
        }
            // append all options inside current select
        $("tr:eq(1) th:eq(" + k + ") .added").append(option);
        //apply bootstrap select plugin
        $("tr:eq(1) th:eq(" + k + ") .added").selectpicker();
        // increment k so that next select will check next column
        k++;
    
              });
    
            }        
    } );
    
    
    } );
    thead select {
    width: 100%; }
        
    .dataTables_scrollHead{
      overflow: visible !important;
      width: 100%;
     }
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css" rel="stylesheet">
    <link href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.17/css/bootstrap-select.min.css">
    
    <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.17/js/bootstrap-select.min.js"></script>
    <div class="table-responsive">
    
               <table id="liveTable" class="table table-bordered" style="width:100%">
                
            <thead>
                <tr>
                <th>COUNTRY_NAME</th>
                <th>COUNTRY_CODE</th>
                <th>TERRITORY</th>
                <th>MARKET</th>
                <th>REGION</th>
                <th>CustomerName</th>
                <th>STATUS</th>
                <th>OrderQty</th>
                <th>Crncy</th>
                <th>LocalPrice</th>
                <th>Dollarprice</th>
                <th>Europrice</th>
                <th>Poundprice</th>
                <th>Ship To</th>
                <th>Ship To Name</th>
                <th>Ship To House/ Street Number</th>
                <th>Ship To City</th>
                <th>Ship To Postal Code</th>
                <th>Ship To Region</th>
                <th>Ship To Telephone</th>
                <th>Ship To Email</th>
                <th>Ship To Country</th>
                </tr>
            </thead>
    
            <tfoot>
                <tr>
               <th>COUNTRY_NAME</th>
                <th>COUNTRY_CODE</th>
                <th>TERRITORY</th>
                <th>MARKET</th>
                <th>REGION</th>
                <th>CustomerName</th>
                <th>STATUS</th>
                <th>OrderQty</th>
                <th>Crncy</th>
                <th>LocalPrice</th>
                <th>Dollarprice</th>
                <th>Europrice</th>
                <th>Poundprice</th>
                <th>Ship To</th>
                <th>Ship To Name</th>
                <th>Ship To House/ Street Number</th>
                <th>Ship To City</th>
                <th>Ship To Postal Code</th>
                <th>Ship To Region</th>
                <th>Ship To Telephone</th>
                <th>Ship To Email</th>
                <th>Ship To Country</th>
    
                </tr>
            </tfoot>
            
        </table></div>
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search