1

由于我没有足够的声誉发表评论,因此我将其作为一个单独的问题发布。我正在尝试实施用户 LFReD 给出的解决方案作为对这个问题的回答:

使用列级标题过滤 Slickgrid 时如何执行部分匹配?

当我从原始 SlickGrid 示例中使用它时:

function filter(item) {
for (var columnId in columnFilters) {
  if (columnId !== undefined && columnFilters[columnId] !== "") {
    var c = mygrid.getColumns()[mygrid.getColumnIndex(columnId)];
    if (item[c.field] != columnFilters[columnId]) {
      return false;
    }
  }
}
return true;
}

当我输入完整的单词时它会起作用。不执行部分匹配。

但是,要执行部分匹配,当我将代码替换为

function filter(item) {
for (var columnId in columnFilters) {
    if (columnId !== undefined && columnFilters[columnId] !== "") {
        var c = mygrid.getColumns()[mygrid.getColumnIndex(columnId)];
        if (item[c.field].indexOf(columnFilters[columnId]) == -1) {
            return false;
        }
    }
}
    return true;
}

我在控制台中收到错误 javascript 错误,显示为“未捕获的 TypeError:对象 1 没有方法 'indexOf'”

我无法弄清楚我的代码中缺少什么。由于之前的代码运行良好,这意味着我已经在我的 HTML 代码中包含了必要的脚本。似乎仍然缺少一些东西。我哪里错了?

4

1 回答 1

2

更改以下行:

if (item[c.field].indexOf(columnFilters[columnId]) == -1) {

至:

if (!(item[c.field] && (""+item[c.field]).indexOf(columnFilters[columnId]) !== -1)) {

完成品:

function filter(item) {
  for (var columnId in columnFilters) {
    if (columnId !== undefined && columnFilters[columnId] !== "") {
      var c = mygrid.getColumns()[mygrid.getColumnIndex(columnId)];
      if (!(item[c.field] && (""+item[c.field]).indexOf(columnFilters[columnId]) !== -1)) {
        return false;
      }
    }
  }
  return true;
}
于 2013-08-04T13:47:40.683 回答