2017-05-04 6 views
0

テーブルには3つの列があります。 「名前」、「説明」、および「ステータス」。私は、ステータス列のテーブルをフィルタリングするドロップダウンフィールドを持っています。基本的に:APIを使用して検索できる間に検索フィールドを無視するにはどうすればよいですか?

$('.js-status-dropdown').dropdown({ 
    onChange: function (value) { 
     $('#dt').DataTable().column('status:name').search(value).draw(); 
    } 
}); 

これは機能しますが、問題は標準のフリーテキスト検索入力フィールドにフリーテキスト検索のステータスフィールドが含まれていることです。

ステータスフィールドにsearchable: falseを設定すると、Datatableはそれを無視するため、ドロップダウンが機能しなくなります。

{ 
    data: 'status', 
    name: 'status', 
    searchable: false // Stops table.column().search(value) from working :-(
} 

理想的には、(標準)フリーテキスト検索フィールドには、stuatus列を無視する必要がありますが、ドロップダウンコードがまだ動作しなければなりません。

+0

より多くのコードが – Seabizkit

+0

必要とされているが、より良いということですか? –

+0

http://code.buzzword-cloud.com/post/2017/05/02/datatables-column-searchingを見てください – Eric

答えて

1

これは動作します:

  1. searchable: falseに列を設定します。これにより、フリーテキスト検索でこの列が無視されます。
  2. 場合、フィルタドロップダウン変更テーブルを再描画
  3. (それが原因1のカラムが含まれていない)の代わりにデータ配列の、settings.aoData元の行のデータを使用してカスタム検索を追加します。

コード:

$('#dt').DataTable(defaults) 
      .on('init.dt', statusHandling); 

    function statusHandling(e, settings, processing) { 

     // Redraw table on dropdown status change 
     $('.js-status-dropdown').dropdown({ 
      onChange: function (value) { 
       $(options.table).DataTable().draw(); 
      } 
     }); 

     // Our custom search function which adds an AND 'status = foo' condition 
     $.fn.dataTable.ext.search.push(
      function (settings, data, dataIndex) { 
       var input = $('input[name=status]').val().toLowerCase(); 
       // Use original data instead of 'data' because status is not searchable 
       var status = settings.aoData[dataIndex]['_aData']['status']; 
       return status.toLowerCase().indexOf(input) === 0; 
      } 
     ); 
    } 
関連する問題