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;
}

コンソールに「Uncaught TypeError: Object 1 has no method 'indexOf'」というエラー javascript エラーが表示されます。

コードに何が欠けているのかわかりません。前のコードは正常に動作しているため、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 に答える