表过滤器不使用退格键

时间:2016-01-16 17:47:19

标签: javascript jquery handsontable

enter image description here

我正在根据http://docs.handsontable.com/0.15.0-beta6/demo-search-for-values.html的内置搜索功能,使用handontable复制一个实时过滤器框。

现在我已经在http://jsfiddle.net/uL3L4teL/4/

进行了基本设置

如文档中所述,在此代码中,如果输入搜索字符串,则使用以下函数获取输出到控制台的匹配单元格:

Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) {
    var queryResult = hot.search.query(this.value);
    console.log(queryResult);
    // ...
});

我想抓取数据数组中与搜索字符串匹配的行,并在重新显示表之前通过搜索字符串过滤原始数据“数据”。这部分可以使用:

Handsontable.Dom.addEvent(searchFiled, 'keyup', function (event) {
  // debugger
  hot.loadData(tData);

  var queryResult = hot.search.query(this.value);
  rows = getRowsFromObjects(queryResult);
  console.log('searchFiled',searchFiled.value);
  console.log('rows',rows);

  console.log('tData', tData);
  var filtered = tData.filter(function (d, ix) {
      return rows.indexOf(ix) >= 0;
  });
  console.log('filtered', filtered);

  hot.loadData(filtered);

});

然而,当我运行这个时,我在控制台中看到以下内容,当我输入'n'后跟退格(以清空搜索字符串)时:

输入'n':

rows [0, 1]
searchFiled n
rows [0, 1]
tData [Array[4], Array[4], Array[4], Array[4]]
filtered [Array[4], Array[4]]

退格(以清空搜索值):

rows []
searchFiled 
rows []
tData [Array[4], Array[4], Array[4], Array[4]]
filtered []

如何修复此问题,以便空字符串再次显示整个未过滤的表?

1 个答案:

答案 0 :(得分:3)

如果值.filter()为空或未定义,您可以在searchFiled.value方法内添加一个条件,该条件将返回所有行:

Updated Example

var filtered = tData.filter(function(_, index) {
  if (searchFiled.value) {
    return rows.indexOf(index) >= 0;
  } else {
    return true;
  }
});

或者,这里是一个单行程,它做同样的事情(虽然它不太可读):

Updated Example

var filtered = tData.filter(function(_, index) {
  return !searchFiled.value || rows.indexOf(index) >= 0;
});