我正在使用自定义多选代码来过滤列。目前我可以根据一个选项进行过滤,但无法根据多个值进行过滤。我需要逻辑来读取,如果选中任何选中的复选框,则显示网格中的选择。我现在写它的方式,它过滤每一个,但如果其中一个选择是假的,它将从网格中删除它,即使其中一个选择为真。
var filter = dataSource.filter() || { logic: "or", filters: [] };
var fieldFilters = $.map(element.find(":checkbox:checked"), function (input) {
return {
field: field,
operator: "eq",
value: input.value
};
});
if (fieldFilters.length) {
removeFiltersForField(filter, field);
filter.filters.push({
logic: "or",
filters: fieldFilters
});
var filterType = filter.filters[0].filters;
if (filter.filters[0].filters.length > 1) {
var filterLogic = { logic: "or", filters: filter.filters };
dataSource.filter(filterLogic.filters[0]);
} else {
dataSource.filter(filterType); // This works, but its only one selection
}
}
如果任何选择为真,我需要它返回并忽略那些假的。目前,它按顺序排列,所以如果第一个选择为true,它会在网格中显示它,但如果下一个选择为false,则将其从网格中删除。
答案 0 :(得分:0)
好的,我能做到这一点。如果某人有更有效的方法,请在此处添加。目前,这有效:
var multipleFilters = [];
if (filterType.length > 1) {
$(filterType).each(function (i, value) {
var simpleFilter = { field: value.field, operator: value.operator, value: value.value };
multipleFilters.push(simpleFilter);
})
if (multipleFilters == 2) {
dataSource.filter(multipleFilters[0] || multipleFilters[1]);
} else if (multipleFilters == 3) {
dataSource.filter(multipleFilters[0] || multipleFilters[1] || multipleFilters[2]);
} else {
dataSource.filter(multipleFilters[1] || multipleFilters[2] || multipleFilters[3]);
}
} else {
dataSource.filter(filterType);
}