简体   繁体   English

复选框上的JS网格过滤器

[英]JS Grid filter on checkbox

I have a JSGRID where I implemented filtering like this: 我有一个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 is a local copy of my json object (to save a trip to the server when I only want to filter). DATA是我的json对象的本地副本(用于在我只想过滤时保存到服务器的旅行)。

This all is working fine but now I added a checkbox field to the grid. 一切工作正常,但现在我向网格添加了一个复选框字段。 Now when I filter I get an error: " Object doesn't support property or method 'toLowerCase'" 现在,当我进行过滤时,我得到一个错误:“对象不支持属性或方法'toLowerCase'”

I guess I try to lowercase a (type) checkbox field. 我想我尝试小写(类型)复选框字段。 I cannot find out how to change my code so the filtering works on all kind of fields. 我找不到更改代码的方法,因此过滤可在所有类型的字段上使用。

Can someone help me out? 有人可以帮我吗?

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

This is my working code: 这是我的工作代码:

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

If filter[key] is undefined there is no filter on the checkbox so all records have to be shown. 如果未定义filter [key],则复选框上将没有过滤器,因此必须显示所有记录。 I have to figure out what to do when other field types are in the grid (integers or date or....) So my solution might not be the best yet. 我必须弄清楚当网格中有其他字段类型(整数或日期或...)时该怎么办,所以我的解决方案可能不是最好的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM