我有一个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'”
我想我尝试小写一个(类型)复选框字段。我无法找到如何更改我的代码,因此过滤适用于所有类型的字段。
有人能帮助我吗?
答案 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]未定义,则复选框上没有过滤器,因此必须显示所有记录。我必须弄清楚当其他字段类型在网格中时要做什么(整数或日期或....)所以我的解决方案可能不是最好的。