【发布时间】: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 能够从复选框返回true、false或undefined
标签: javascript jsgrid