2014-10-08 101 views
1

我試圖在用戶單擊搜索按鈕時在數據表上執行搜索。Jquery Datatables 1.10搜索功能只能工作一次

如果我點擊NY/London按鈕,表格會正確過濾。 如果我現在單擊舊金山按鈕,表格將不顯示任何記錄。

我認爲這種行爲是因爲表需要清除所有現有的搜索之前,可以完成一個新的。我無法弄清楚如何做到這一點。

下面是代碼:

$(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

任何人有任何想法如何使這項工作?

+0

紐約/倫敦按鈕不起作用,舊金山按鈕不起作用。如果您先點擊舊金山按鈕,那麼您會發現紐約/倫敦按鈕沒有按照您希望的方式執行。這是因爲過濾後的表格會重新繪製爲新表格,舊金山或紐約/倫敦不能同時共存。 – Aaron 2014-10-08 22:58:40

+0

所以我需要重新繪製全表,然後過濾。我現在用一種不同的方式使用數據表格過濾器函數,只要一行符合我的條件就返回true。 – user3101337 2014-10-10 18:34:35

回答

0

您的問題是,您每次單擊其中一個按鈕時都會添加其他過濾器,但不會刪除舊過濾器。您真正需要的是在每次點擊重繪表格之前更改的幾個全局變量。一旦將其推到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(); 
    }); 
});