由于我没有足够的声誉来评论,我将此作为一个单独的问题发布。我正在尝试实现用户LFReD给出的解决方案作为这个问题的答案:
How to perform partial matches when filtering Slickgrid using column-level headers?
当我从原始的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代码中包含了必要的脚本。似乎仍然缺少一些东西。我哪里错了?
答案 0 :(得分:1)
更改以下行:
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;
}