在Datatable上设置自动对焦-$ .focus()不做更改

时间:2018-07-29 13:56:34

标签: javascript jquery html datatables focus

我想将自动对焦设置为表中的第一个选择输入。但是,由于选择输入是由DataTables创建的,因此我必须在选择输入和由DataTables呈现的表之后调用jQuery函数。我正在尝试使用$("#autofocus_on_load").focus()。但这并没有做任何改变,或者至少没有集中在选择输入上。

那怎么可能? -你们有什么解决方案吗?

var table;

$(document).ready(function() {
  table = $('#assignment_overview_table').DataTable( {
    "displayStart": 0,
    "language": {
      "url": "https://cdn.datatables.net/plug-ins/1.10.19/i18n/German.json"
    },
    "processing": true,
    "pageLength": 100,
    "bSortCellsTop": true,
    "fixedHeader": true,
    initComplete: function () {
      this.api().columns().every( function () {
        var column = this;
        var select = $('<select><option value=""></option></select>');
        select.appendTo( $(column.header()).empty() )

        select.on( 'click', function(e) {
          e.stopPropagation();
        } );


        select.on( 'change', function () {
          var val = $.fn.dataTable.util.escapeRegex(
            $(this).val()
          );

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

        column.data().unique().sort().each( function ( d, j ) {
          select.append( '<option value="'+d+'">'+d+'</option>' )
        } );
      } );
    },
  });

  table.on('draw', function () {
    table.columns().indexes().each( function ( idx ) {
      var select = $(table.column( idx ).header()).find('select');

      if ( select.val() === '' ) {
        select
          .empty()
          .append('<option value=""/>');

        table.column(idx, {search:'applied'}).data().unique().sort().each( function ( d, j ) {
          select.append( '<option value="'+d+'">'+d+'</option>' );
        } );
      }
    } );
  } );


  $("#autofocus_on_load > select").focus();
} );
<script src="https://code.jquery.com/jquery-3.1.0.js"></script><script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js" type="text/javascript"></script>
<script src="https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap.min.js" type="text/javascript"></script>
<script src="https://cdn.datatables.net/fixedheader/3.1.5/js/dataTables.fixedHeader.min.js"></script>

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" type="text/css">
<link href="https://cdn.datatables.net/fixedheader/3.1.5/css/fixedHeader.bootstrap.min.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.19/css/dataTables.bootstrap.min.css">

<table class="table table-striped table-bordered" id="assignment_overview_table">
<thead>
      <tr>
        <th id="autofocus_on_load">ID</th>
        <th>NAME</th>
        <th>SURNAME</th>
        <th>CASTE</th>
        <th>EXTRA</th>
      </tr>
      <tr>
        <th>ID</th>
        <th>NAME</th>
        <th>SURNAME</th>
        <th>CASTE</th>
        <th>EXTRA</th>
      </tr>
    </thead>
    <tbody>
    <tr>
      <td>1</td>
      <td>xyz</td>
      <td>xyz</td>
      <td>xyz</td>
      <td>xyz</td>
    </tr>
    <tr>
      <td>2</td>
      <td>xyz</td>
      <td>xyz</td>
      <td>xyz</td>
      <td>xyz</td>
    </tr>
    <tr>
      <td>3</td>
      <td>xyz</td>
      <td>xyz</td>
      <td>xyz</td>
      <td>xyz</td>
    </tr>
    <tr>
      <td>4</td>
      <td>xyz</td>
      <td>xyz</td>
      <td>xyz</td>
      <td>xyz</td>
    </tr>
    <tr>
      <td>5</td>
      <td>xyz</td>
      <td>xyz</td>
      <td>xyz</td>
      <td>xyz</td>
    </tr>
    </tbody>
</table>

致以问候,谢谢!

2 个答案:

答案 0 :(得分:1)

我可以看到您正在将#autofocus_on_load的ID <th>分配给无法聚焦的元素。您应该使用<input type="text" autofocus="true" />

或同样,我相信您不能使用idclass选择器进行动态DOM渲染。您可以改用 EventListener 。试试这个。我希望这对您有用

答案 1 :(得分:1)

只需移动这一行:

 $("#autofocus_on_load > select").focus();

initComplete的末尾。

您的<select>直到那时才存在。