Javascript 通过复选框向剑道网格添加多个过滤

Javascript 通过复选框向剑道网格添加多个过滤,javascript,jquery,kendo-ui,kendo-grid,Javascript,Jquery,Kendo Ui,Kendo Grid,我有一个剑道网格,用于记录四种状态类型:“已计划”、“打开”、“执行中”和“关闭” 我正在尝试使用复选框作为过滤器,这样我就可以只显示我需要的状态。我知道如何设置一个过滤器,例如,只列出“计划”记录或“已关闭”记录。但我想显示“预定”和“打开”记录,例如,我还没有弄清楚如何显示。我现在所拥有的只适用于一种状态类型 下面是一些代码: $('input[type="checkbox"]').on('change', function () { var grid = $("#grid").d

我有一个剑道网格,用于记录四种状态类型:“已计划”、“打开”、“执行中”和“关闭”

我正在尝试使用复选框作为过滤器,这样我就可以只显示我需要的状态。我知道如何设置一个过滤器,例如,只列出“计划”记录或“已关闭”记录。但我想显示“预定”和“打开”记录,例如,我还没有弄清楚如何显示。我现在所拥有的只适用于一种状态类型

下面是一些代码:

$('input[type="checkbox"]').on('change', function () {
    var grid = $("#grid").data("kendoGrid");
    var ck_scheduled = $('#ck_scheduled').prop('checked');
    var ck_open = $('#ck_open').prop('checked');
    var ck_onexecution = $('#ck_onExecution').prop('checked');
    var ck_closed = $('#ck_closed').prop('checked');
    var allFilters = [];

    if (ck_scheduled) {
        allFilters.push({ logic: "or", field: "Status", operator: "eq", value: "Scheduled" });
    }
    if (ck_open) {
        allFilters.push({ logic: "or", field: "Status", operator: "eq", value: "Open" });
    }
    if (ck_onexecution) {
        allFilters.push({ logic: "or", field: "Status", operator: "eq", value: "On execution" });
    }
    if (ck_closed) {
        allFilters.push({ logic: "or", field: "Status", operator: "eq", value: "Closed" });
    }
    grid.dataSource.filter(allFilters);
});
我在这里尝试用这个函数做的是:当其中一个复选框更改时,它将检查4个复选框的状态,并为选中的复选框添加一个过滤器(使用“或”逻辑运算符)。最后,应用所有过滤器


但实际情况是:它只应用一个过滤器。例如,当我选中“关闭”复选框时,它只显示“关闭”记录,而忽略其他选中的复选框。

在过滤器中设置
逻辑时出错<代码>逻辑
是为所有过滤条件全局定义的。即,设置过滤条件的
。不是针对每种情况

change
事件处理程序应该如下所示:

$('input[type="checkbox"]').on('change', function () {
    var grid = $("#grid").data("kendoGrid");
    var ck_scheduled = $('#ck_scheduled').prop('checked');
    var ck_open = $('#ck_open').prop('checked');
    var ck_onexecution = $('#ck_onExecution').prop('checked');
    var ck_closed = $('#ck_closed').prop('checked');
    var allFilters = [];

    if (ck_scheduled) {
        allFilters.push({ field: "Status", operator: "eq", value: "Scheduled" });
    }
    if (ck_open) {
        allFilters.push({ field: "Status", operator: "eq", value: "Open" });
    }
    if (ck_onexecution) {
        allFilters.push({ field: "Status", operator: "eq", value: "On execution" });
    }
    if (ck_closed) {
        allFilters.push({ field: "Status", operator: "eq", value: "Closed" });
    }
    grid.dataSource.filter({ logic: "or", filters: allFilters});
});
var-ds=[
{代码:“c1”,日期:“2014/01/01”,状态:“预定”},
{代码:“c2”,日期:“2014/01/01”,状态:“开放”},
{代码:“c3”,日期:“2014/01/01”,状态:“OneExecution”},
{代码:“c4”,日期:“2014/01/01”,状态:“关闭”},
{代码:“c5”,日期:“2014/01/01”,状态:“开放”},
{代码:“c6”,日期:“2014/01/01”,状态:“开放”},
{代码:“c7”,日期:“2014/01/01”,状态:“执行中”},
{代码:“c8”,日期:“2014/01/01”,状态:“执行中”}
];
var grid=$(“#grid”).kendoGrid({
数据源:ds,
柱:
[
{字段:“代码”},
{字段:“日期”},
{字段:“状态”}
]
}).数据(“kendoGrid”);
$('input[type=“checkbox”]”)。在('change',函数(){
var grid=$(“#grid”).data(“kendoGrid”);
var ck_scheduled=$('ck#u scheduled').prop('checked');
var ck_open=$('#ck_open').prop('checked');
var ck#u onexecution=$('ck#u onexecution').prop('checked');
var ck_closed=$('ck#u closed').prop('checked');
var-allFilters=[];
如果(按计划完成){
push({field:“Status”,operator:“eq”,value:“Scheduled”});
}
如果(ck_打开){
push({field:“Status”,operator:“eq”,value:“Open”});
}
if(ck_onexecution){
push({field:“Status”,operator:“eq”,value:“On execution”});
}
如果(控制单元关闭){
push({field:“Status”,operator:“eq”,value:“Closed”});
}
filter({logic:“or”,filters:allFilters});
});

预定:
开放式:
执行时:
关闭: