【问题标题】:Jquery Datatables 1.10 search function only works onceJquery Datatables 1.10 搜索功能只工作一次
【发布时间】:2014-10-08 02:01:42
【问题描述】:

当用户单击搜索按钮时,我正在尝试对数据表执行搜索。

如果我单击 NY/London 按钮,表格将正确过滤。 如果我现在单击 San Francisco 按钮,表格将不显示任何记录。

我认为这种行为是因为需要先清除表中的所有现有搜索,然后才能进行新搜索。我不知道该怎么做。

代码如下:

$(document).ready( function () {
  var table = $('#example').DataTable();

  function filter_table(param1,param2){
     $.fn.dataTable.ext.search.push(
             function( settings, data, dataIndex ) { 
               if ( data[2]==param1 || data[2]==param2){return true;}
               return false;
             }
        ); 
  }


  $("#ny_london").click(function(){
    filter_table('New York','London');
    table.draw();
  });


  $("#sf").click(function(){
    filter_table('San Francisco',null);
    table.draw();
  });

} );

这是表格和代码的实时链接。

http://live.datatables.net/tulavila/1/edit

有人知道如何完成这项工作吗?

【问题讨论】:

  • 不是 NY/London 按钮有效而 San Francisco 按钮无效。如果您先单击 San Francisco 按钮,您会发现 NY/London 按钮没有按照您希望的方式执行。这是因为过滤后的表被重绘为一个新表,旧金山或纽约/伦敦不能同时共存。
  • 所以我需要先重新绘制整个表格,然后过滤。我现在以不同的方式使用数据表过滤器函数,如果一行满足我的条件,则返回 true。

标签: jquery jquery-datatables datatables-1.10


【解决方案1】:

您的问题是每次单击其中一个按钮时都会添加额外的过滤器,但从不删除旧的过滤器。您真正需要的是在每次单击时重绘表格之前更改的几个全局变量。一旦将过滤器推送到search 数组,过滤器就会自动应用于每次重绘。

$(document).ready( function () {
  var table = $('#example').DataTable();
  var param1, param2;

  $.fn.dataTable.ext.search.push(
       function( settings, data, dataIndex ) { 
           if ( data[2]==param1 || data[2]==param2){return true;}
           return false;
       }
  ); 

  $("#ny_london").click(function(){
    param1 = 'New York';
    param2 = 'London';
    table.draw();
  });

  $("#sf").click(function(){
    param1 = 'San Francisco';
    param2 = '';
    table.draw();
  });
} );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多