Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How do I set focus on first column after selecting Reset button in javascript?

I am working on a page that needs to be accessible through keyboard. Everything works fine but I am not sure how to set focus on the Name column (first dropdwon) after I hit Filter Results button? I tired the following code but it doesn’t work –

$(".dropdown1").focus();

Is there a way to set focus on spanid? or what’s the best way to achieve this? Thanks.

Here is the link to my code – https://live.datatables.net/datubino/10/edit

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

$(document).ready(function() {
  var table = $('#example').DataTable({
    responsive: true,
    searching: true,
    columnDefs: [{
      target: 6,
      visible: false,
      searchable: true,
    }],
    dom: 'ilfrt<"left-col"B><"toolbar"><"right-col"p>',
    fnInitComplete: function() {
      $('div.toolbar').html('<p>Custom tool bar!</p>');
    },
    buttons: [{
        extend: 'excelHtml5',
        className: 'mybutton',
        exportOptions: {
          columns: ':visible'
        }
      },
     //  'colvis'
    ],
  });
  buildSelect(table);
  table.on('draw', function() {
    buildSelect(table);
  });

  $('#myInput').on('keyup', function() {
    table.search(this.value).draw();
  });

  $('#test').on('click', function() {
    table.search('').columns().search('').draw();
    $(".dropdown1").focus();
  });
});

function buildSelect(table) {
  var counter = 0;
  table.columns([0, 1, 2]).every(function() {
    var column = table.column(this, {
      search: 'applied'
    });
    counter++;
    var select = $('<select><option value="">select me</option></select>')
      .appendTo($('#dropdown' + counter).empty())
      .on('change', function() {
        var val = $.fn.dataTable.util.escapeRegex(
          $(this).val()
        );

        column
          .search(val ? '^' + val + '$' : '', true, false)
          .draw();
      });

    if (column.index() === 0) {
      var filteredNames = column.data().unique().toArray();
      ['Garrett', 'Test1', 'Ashton'].forEach((d) => {
        if (filteredNames.includes(d)) {
          select.append('<option value="' + d + '">' + d + '</option>');
        }
      });
    } else {
      column.data().unique().sort().each(function(d, j) {
        select.append('<option value="' + d + '">' + d + '</option>');
      });
    }

    // The rebuild will clear the exisiting select, so it needs to be repopulated
    var currSearch = column.search();
    if (currSearch) {
      // ** MY CHANGE **
      // Use RegEx to find the selected value from the unique values of the column.
      // This will use the Regular Expression returned from column.search to find the first matching item in column.data().unique
      select.val(column.data().unique().toArray().find((e) => e.match(new RegExp(currSearch))));
    }
  });
}
<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.15/css/jquery.dataTables.min.css" />
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/1.4.0/css/buttons.dataTables.min.css" />

  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
  <script src="https://cdn.rawgit.com/bpampuch/pdfmake/0.1.27/build/pdfmake.min.js"></script>
  <script src="https://cdn.rawgit.com/bpampuch/pdfmake/0.1.27/build/vfs_fonts.js"></script>
  <script src="https://cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script>
  <script src="https://cdn.datatables.net/buttons/1.4.0/js/dataTables.buttons.min.js"></script>
  <script src="https://cdn.datatables.net/buttons/1.4.0/js/buttons.flash.min.js"></script>
  <script src="https://cdn.datatables.net/buttons/1.4.0/js/buttons.html5.min.js"></script>
  <script src="https://cdn.datatables.net/buttons/1.4.0/js/buttons.print.min.js"></script>
  <meta charset=utf-8 />
  <title>DataTables - JS Bin</title>
</head>
<div class="searchbox">
  <p>Name:
    <span id="dropdown1">
  </span>
  </p>
  <p>Postion: <span id="dropdown2">
  </span>
  </p>
  <p>Office: <span id="dropdown3">
</span>
  </p>
  <button type="button" id="myInput">Filter</button>
  <button type="button" id="test">Reset</button>
</div>
<table id="example" class="cell-border row-border stripe dataTable no-footer dtr-inline" role="grid" style=" width: 100%; padding-top: 10px;">
  <thead>
    <tr>
      <th>&#160;</th>
      <th>&#160;</th>
      <th>&#160;</th>
      <th colspan="3" style=" text-align: center;">Information</th>
      <th>&#160;</th>
    </tr>
    <tr>
      <th>Name</th>
      <th>Position</th>
      <th>Office</th>
      <th>Age</th>
      <th>Start date</th>
      <th>Salary</th>
      <th>Hidden Column</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Test1</td>
      <td>test</td>
      <td>test3</td>
      <td>test4</td>
      <td>2011/04/25</td>
      <td>$3,120</td>
      <td>Sys Architect</td>
    </tr>
    <tr>
      <td>Garrett</td>
      <td>Director: fgghghjhjhjhkjkj</td>
      <td>Edinburgh</td>
      <td>63</td>
      <td>2011/07/25</td>
      <td>$5,300</td>
      <td>Director:</td>
    </tr>
    <tr>
      <td>Ashton</td>
      <td>Technical Authorjkjkjk fdfd h gjjjhjhk</td>
      <td>San Francisco</td>
      <td>66</td>
      <td>2009/01/12</td>
      <td>$4,800</td>
      <td>Tech author</td>
    </tr>
    </tr>
  </tbody>
</table>
</div>

>Solution :

Use # instead of . to target an id and use the child combinator (>) to get the <select> element inside that <span>.

$("#dropdown1 > select").focus();
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading