JS Grid过滤器复选框

时间:2018-04-10 13:55:49

标签: javascript jsgrid

我有一个JSGRID,我实现了这样的过滤:

    criteria = filter;
    var d = $.Deferred();               
                if (DATA) {
                var filteredData = $.grep(DATA, function(item, idx) {
                    for (var key in filter) {
                        var value = filter[key].toLowerCase();
                        if (value.length > 0) {
                            if (((item[key]).toString()).toLowerCase().indexOf(value) == -1)
                                return false;
                        }
                    }
                    return true;
                });
                d.resolve(filteredData);  
                return d.promise();

DATA是我的json对象的本地副本(当我只想过滤时保存到服务器的行程)。

这一切都运行正常,但现在我在网格中添加了一个复选框字段。现在,当我过滤时,我收到一个错误:“对象不支持属性或方法'toLowerCase'”

我想我尝试小写一个(类型)复选框字段。我无法找到如何更改我的代码,因此过滤适用于所有类型的字段。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:0)

var filteredData = $.grep(DATA, function(item, idx) {
  for (var key in filter) {
    var value = filter[key]
    if(typeof value === "string"){
      if (value.length > 0 && item[key].toString().toLowerCase().indexOf(value.toLowerCase()) === -1){
              return false;
      }
    } else {
      if(value === undefined){ 
      
      }
      else if(value){ //checkbox is checked
        //do something to compare the value to the label/name
      } else { //checkbox is false
        
      }
    }
  }
  return true;
})

答案 1 :(得分:0)

这是我的工作代码:

 loadData: function(filter) {    
            criteria = filter;
            var d = $.Deferred();               
                            if (DATA) {
                var filteredData = $.grep(DATA, function(item, idx) {
                    for (var key in filter) {
                        if(typeof filter[key] === "string"){
                            var value = filter[key].toLowerCase();
                            if (value.length > 0) {
                                if (((item[key]).toString()).toLowerCase().indexOf(value) == -1)
                                    return false;
                            }
                        }
                        else{
                            var value2 = filter[key]
                            if (filter[key] === undefined){
                                return true;
                            }
                            else if (item[key] != value2) {
                                return false;
                            }
                        }
                    }
                    return true;
                });
                d.resolve(filteredData);  
                return d.promise();
            }

如果过滤器[key]未定义,则复选框上没有过滤器,因此必须显示所有记录。我必须弄清楚当其他字段类型在网格中时要做什么(整数或日期或....)所以我的解决方案可能不是最好的。