【问题标题】:JS Grid filter on checkbox复选框上的 JS 网格过滤器
【发布时间】:2018-04-10 13:55:49
【问题描述】:

我有一个 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'”

我想我尝试将(类型)复选框字段小写。我不知道如何更改我的代码,以便过滤适用于所有类型的字段。

谁能帮帮我?

【问题讨论】:

  • 您应该在控制台记录item[key] 的值,然后再尝试将其转换为字符串并将其小写以查看发生了什么,看起来您可能存储的是复选框本身而不是值其中
  • 好吧,过滤器对象(所有可能的过滤器字段)中包含所有字符串,除了我的复选框字段“未定义”。所以这里我们有一个问题,但我不知道如何解决它。
  • 对,但是您传递的复选框数据可能不正确。在没有看到代码的情况下,我最好的猜测是您在需要检查 checked 状态时尝试使用 .value
  • 通过 bij JSGrid(对我来说有点黑盒子)。我会努力弄清楚的。
  • 嗯,好的。好吧,除非它正在做一些非常奇怪的事情,否则从复选框返回的值永远不会是字符串,因此该逻辑线应该失败。 filter[key] 可能不是字符串 - 我认为通过查看 js-grid 能够从复选框返回 truefalseundefined

标签: javascript jsgrid


【解决方案1】:

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

【讨论】:

  • 非常感谢,这将给我一个开始!!
【解决方案2】:

这是我的工作代码:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多