【问题标题】:JQuery .change(function) not working in DataTables 2nd page and afterJQuery .change(function) 在 DataTables 第 2 页及之后不起作用
【发布时间】:2020-08-12 06:35:58
【问题描述】:

我正在使用 Jquery 数据表并使用依赖于 table 的 select 标记,但 Jquery 脚本在第二页及之后不起作用。我想根据所有页面中的选择标签过滤表中的结果,但是一旦我从选择标签中选择选项,它只会过滤第一页中存在的行,而对于剩余的页面,我必须再次使用选择标签。我正在共享代码 sn-p。请提供一些建议,使其适用于任何页面的所有行。

<body>
    <select id="cato" class="form-control" >
        <option disabled selected="true">-Select Category-</option>
        <option>Electronics</option>
        <option>Sports</option>
    </select>

    <table class="table table-bordered" id="example"  data-order='[[ 0, "desc" ]]' data-page-length='3'>
        <thead>
            <tr>
                <th>Product</th>
                <th>Subcategory</th>
                <th>Category</th>
            </tr>
        </thead>
        <tbody id="r">
            <tr>
                <td>Samsung</td>
                <td>Mobile</td>
                <td>Electronics</td>
            </tr>
            <tr>
                <td>Racket</td>
                <td>Tennis</td>
                <td>Sports</td>
            </tr>
            <tr>
                <td>Bat</td>
                <td>Cricket</td>
                <td>Sports</td>
            </tr>
            <tr>
                <td>Dell</td>
                <td>Laptop</td>
                <td>Electronics</td>
            </tr>
            <tr>
                <td>Iphone</td>
                <td>Mobile</td>
                <td>Electronics</td>
            </tr>
        </tbody>
    </table>
</body>

表格

 <script type="text/javascript">
    var table = $('#example').DataTable({
    "bLengthChange": false,
        searching: false,
  });
  </script>

jQuery

<script>   
$('#cato').on('change', function() {
  var filter, table, tr, td, i;
  filter=$("#cato option:selected").text().toUpperCase();
  table = document.getElementById("r");
  tr = table.getElementsByTagName("tr");
  for (i = 0; i < tr.length; i++) {
    td = tr[i].getElementsByTagName("td")[2];          
    if (td) { 
      if ((td.innerHTML.toUpperCase().indexOf(filter) > -1))
      {
        tr[i].style.display = "";
      }
       else {
        tr[i].style.display = "none";
      }
    }       
  }
});

【问题讨论】:

    标签: javascript html jquery datatable datatables


    【解决方案1】:

    我会采用不同的方法。

    看我的例子:

    var table = $('#example').DataTable({
      "bLengthChange": false,
      pageLength: 2,
      dom: 'tip'
    });
      
    $.fn.dataTable.ext.search.push(
        function( settings, data, dataIndex ) {
            
            var filter= $("#cato option:selected").text().toUpperCase();
            var subCategory = String(data[2]).toUpperCase();
     
            if ( filter == subCategory )
                return true;
            else
                return false;
        }
    );
      
    $('#cato').on('change', function() {
      table.draw()
    });
    <link href="https://cdn.datatables.net/1.10.21/css/jquery.dataTables.min.css" rel="stylesheet"/>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
    
    <select id="cato" class="form-control">
      <option disabled selected="true">-Select Category-</option>
      <option>Electronics</option>
      <option>Sports</option>
    </select>
    
    <table id="example" class="table display">
      <thead>
        <tr>
          <th>Product</th>
          <th>Subcategory</th>
          <th>Category</th>
        </tr>
      </thead>
      <tbody id="r">
        <tr>
          <td>Samsung</td>
          <td>Mobile</td>
          <td>Electronics</td>
        </tr>
        <tr>
          <td>Racket</td>
          <td>Tennis</td>
          <td>Sports</td>
        </tr>
        <tr>
          <td>Bat</td>
          <td>Cricket</td>
          <td>Sports</td>
        </tr>
        <tr>
          <td>Dell</td>
          <td>Laptop</td>
          <td>Electronics</td>
        </tr>
        <tr>
          <td>Iphone</td>
          <td>Mobile</td>
          <td>Electronics</td>
        </tr>
        <tr>
          <td>Soccer Ball</td>
          <td>Soccer</td>
          <td>Sports</td>
        </tr>
      </tbody>
    </table>

    重要提示:为了让$.fn.dataTable.ext.search.push(正常工作,jQuery DataTable searching选项必须是true(它的默认值),否则它不会工作。但如果您不想使用默认搜索框,甚至不想隐藏它,您可以使用:

    dom property

    在我的示例中,我使用了值tip。正如您在上面的链接中看到的......

    t - 是 table 本身
    i - is Table i信息摘要
    p - is p控制

    【讨论】:

    • 感谢您的编辑和回答,它就像一个魅力。我花了一些时间想办法隐藏搜索:)。我使用 display:none 属性隐藏了它。你能帮我解决这个问题吗?这是对你的回答的改进stackoverflow.com/questions/63373311/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多