jQuery dataTables:使用自定义过滤器对表进行排序会导致行消失

时间:2016-12-09 21:08:02

标签: jquery datatables

我对以下数据表使用自定义过滤...

var table = $('#placeholder').DataTable({
  "bJQueryUI":true,
  "bFilter": true,
  "bPaginate": true,
  "bLengthChange": false,
  "pageLength": 25,
  "bDeferRender": true,
  "bSortClasses": false,
  "data": {$data} // nette injected
});

以便仅显示与第2列值相关的唯一行...

var rows = [];

$.fn.dataTable.ext.search.push(function (settings, data, dataIndex) {

  // Retrieve info for unique row filtering
  // If value is set, then unique filtering is enabled
  var filterUVal = parseInt($('#frm-filterForm-unique').val());
  var columnDVal = data[2];

  // Filter unique row
  if (!isNaN(filterUVal)) {
    if (~rows.indexOf(columnDVal)) {
      return false;
    } else {
      rows.push(columnDVal);
    }
  }
  return true;
});

如果我根据任何列排序并因此应用过滤器,那么它可以工作。但是,如果我首先应用自定义过滤器并根据任何列进行排序,那么所有行都会消失,我只看到空的数据表。

1 个答案:

答案 0 :(得分:1)

这是因为永远不会重置rows。考虑一下,最终data[2]将包含所有唯一rows值,因此无论搜索项如何,每行都返回false。

我相信您可以通过在draw处理程序中重置$('#placeholder').on('draw.dt', function() { rows = [] }) 来解决此问题:

get ':param', to: :show, controller: 'pages'