Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 剑道UI网格-过滤器-日期范围_Javascript_Jquery_Filter_Kendo Ui_Kendo Grid - Fatal编程技术网

Javascript 剑道UI网格-过滤器-日期范围

Javascript 剑道UI网格-过滤器-日期范围,javascript,jquery,filter,kendo-ui,kendo-grid,Javascript,Jquery,Filter,Kendo Ui,Kendo Grid,按日期范围筛选列与我在中找到的解决方案配合得很好,因此 但是 “此解决方案唯一的问题是,如果您只选择结束日期并应用过滤器,下次打开过滤器菜单时,开始日期将填充您输入的结束日期,LTE运营商将被选择,这将由jQuery代码更改,从而导致错误的过滤器” 同一主题中的问题 如何解决此问题?解决方法是为开始日期提供null值,即使用户尚未选择该值。 但是,我们必须控制提交按钮。 function grid_filterMenuInit(e) { var currentFieldName = e

按日期范围筛选列与我在中找到的解决方案配合得很好,因此

但是
“此解决方案唯一的问题是,如果您只选择结束日期并应用过滤器,下次打开过滤器菜单时,开始日期将填充您输入的结束日期,LTE运营商将被选择,这将由jQuery代码更改,从而导致错误的过滤器”

同一主题中的问题


如何解决此问题?

解决方法是为开始日期提供
null
值,即使用户尚未选择该值。
但是,我们必须控制提交按钮

function grid_filterMenuInit(e) {
    var currentFieldName = e.field;
    if(currentFieldName === "yourFieldDate") {
        console.info("ignoring this field: <"   + currentFieldName + ">");
        return;
    }
    console.info("performing this field: <"     + currentFieldName + ">");

    var filterSubmit = e.container.find("[type=submit]:eq(0)");
    $(filterSubmit).click(function() {
        var searchDateAfter     = e.container.find("input:eq(0)");
        var searchDateAfter1    = $(searchDateAfter).val();
        var searchDateBefore    = e.container.find("input:eq(1)");
        var searchDateBefore1   = $(searchDateBefore).val();
        var gridDatasource      = $("#yourGridId").data("kendoGrid").dataSource;

        var jsDateBefore   = null;
        var jsDateAfter    = null;

        // we must convert kendoDateTime to JavaScript DateTime object
        // in my case the date time format is : yyyy/MM/dd HH:mm:ss
        if (typeof searchDateBefore1 !== 'undefined') {
            jsDateBefore  = newJsDate(searchDateBefore1);
        }
        if (typeof searchDateAfter1  !== 'undefined') {
            jsDateAfter = newJsDate(searchDateAfter1);
        }

        var previousFilter      = gridDatasource.filter();
        var previousFilters     = new Array();
        var newFilters          = new Array();

        // storing the previous filters ...
        if (typeof previousFilter === 'object' && previousFilter.hasOwnProperty("filters")) {
            previousFilters = previousFilter.filters;
            for (var i=0 ; i<previousFilters.length ; i++) {
                if (previousFilters[i].field !== currentFieldName) {
                    if (newFilters.length == 0) {
                        newFilters = [previousFilters[i]];
                    }
                    else {
                        newFilters.push(previousFilters[i]);
                    }
                }
            }
        }

        // this is the soltion : we must provide the first filter, even if the user has not provide the begin date
        // and the value will be : null
        if (newFilters.length == 0) {
            newFilters =    [{field: currentFieldName, operator: "gte", value: jsDateAfter   }];
        }
        else {
            newFilters.push ({field: currentFieldName, operator: "gte", value: jsDateAfter   });
        }

        if (jsDateBefore !== null) {
            newFilters.push ({field: currentFieldName, operator: "lte", value: jsDateBefore  });  
        }
        gridDatasource.filter (newFilters);
        $(".k-animation-container").hide();
        // to stop the propagation of filter submit button 
        return false;
    });
}


function newJsDate(dateTime) {
    if (dateTime        === null        || 
        typeof dateTime === 'undefined' ||
        dateTime        === "") {
        return null;
    }
    var dateTime1        = dateTime.split(" ");
    var date             = dateTime1[0];
    var time             = dateTime1[1];

    var date1     = date.split("/");
    var time1     = time.split(":");

    var year      = parseInt(date1[0], 10);
    var month     = parseInt(date1[1], 10);
        month     = month - 1;
    var day       = parseInt(date1[2], 10);

    var hour      = parseInt(time1[0], 10);
    var minute    = parseInt(time1[1], 10);
    var second    = parseInt(time1[2], 10);

    var jsDate    = new Date(year, month,  day,
                    hour, minute, second);

    return jsDate;
}
function grid\u filterMenuInit(e){
var currentFieldName=e.field;
如果(currentFieldName==“yourFieldDate”){
console.info(“忽略此字段:”);
返回;
}
console.info(“执行此字段:”);
var filterSubmit=e.container.find(“[type=submit]:eq(0)”);
$(filterSubmit)。单击(函数(){
var searchDateAfter=e.container.find(“输入:eq(0)”;
var searchDateAfter1=$(searchDateAfter1.val();
var searchDateBefore=e.container.find(“输入:等式(1)”);
var searchDateBefore1=$(searchDateBefore).val();
var gridDatasource=$(“#yourGridId”).data(“kendoGrid”).dataSource;
var jsDateBefore=null;
var jsDateAfter=null;
//我们必须将kendoDateTime转换为JavaScript DateTime对象
//在我的例子中,日期时间格式是:yyyy/MM/dd HH:MM:ss
如果(searchDateBefore1!的类型==“未定义”){
jsDateBefore=newJsDate(searchDateBefore1);
}
如果(类型为searchDateAfter1!=“未定义”){
jsDateAfter=newJsDate(searchDateAfter1);
}
var previousFilter=gridDatasource.filter();
var previousFilters=新数组();
var newFilters=newarray();
//正在存储以前的筛选器。。。
if(typeof previousFilter=='object'&&previousFilter.hasOwnProperty(“过滤器”)){
previousFilters=previousFilter.filters;

对于(var i=0;i而言,解决方案是为开始日期提供
null
值,即使用户尚未选择该值。
但是,我们必须控制提交按钮

function grid_filterMenuInit(e) {
    var currentFieldName = e.field;
    if(currentFieldName === "yourFieldDate") {
        console.info("ignoring this field: <"   + currentFieldName + ">");
        return;
    }
    console.info("performing this field: <"     + currentFieldName + ">");

    var filterSubmit = e.container.find("[type=submit]:eq(0)");
    $(filterSubmit).click(function() {
        var searchDateAfter     = e.container.find("input:eq(0)");
        var searchDateAfter1    = $(searchDateAfter).val();
        var searchDateBefore    = e.container.find("input:eq(1)");
        var searchDateBefore1   = $(searchDateBefore).val();
        var gridDatasource      = $("#yourGridId").data("kendoGrid").dataSource;

        var jsDateBefore   = null;
        var jsDateAfter    = null;

        // we must convert kendoDateTime to JavaScript DateTime object
        // in my case the date time format is : yyyy/MM/dd HH:mm:ss
        if (typeof searchDateBefore1 !== 'undefined') {
            jsDateBefore  = newJsDate(searchDateBefore1);
        }
        if (typeof searchDateAfter1  !== 'undefined') {
            jsDateAfter = newJsDate(searchDateAfter1);
        }

        var previousFilter      = gridDatasource.filter();
        var previousFilters     = new Array();
        var newFilters          = new Array();

        // storing the previous filters ...
        if (typeof previousFilter === 'object' && previousFilter.hasOwnProperty("filters")) {
            previousFilters = previousFilter.filters;
            for (var i=0 ; i<previousFilters.length ; i++) {
                if (previousFilters[i].field !== currentFieldName) {
                    if (newFilters.length == 0) {
                        newFilters = [previousFilters[i]];
                    }
                    else {
                        newFilters.push(previousFilters[i]);
                    }
                }
            }
        }

        // this is the soltion : we must provide the first filter, even if the user has not provide the begin date
        // and the value will be : null
        if (newFilters.length == 0) {
            newFilters =    [{field: currentFieldName, operator: "gte", value: jsDateAfter   }];
        }
        else {
            newFilters.push ({field: currentFieldName, operator: "gte", value: jsDateAfter   });
        }

        if (jsDateBefore !== null) {
            newFilters.push ({field: currentFieldName, operator: "lte", value: jsDateBefore  });  
        }
        gridDatasource.filter (newFilters);
        $(".k-animation-container").hide();
        // to stop the propagation of filter submit button 
        return false;
    });
}


function newJsDate(dateTime) {
    if (dateTime        === null        || 
        typeof dateTime === 'undefined' ||
        dateTime        === "") {
        return null;
    }
    var dateTime1        = dateTime.split(" ");
    var date             = dateTime1[0];
    var time             = dateTime1[1];

    var date1     = date.split("/");
    var time1     = time.split(":");

    var year      = parseInt(date1[0], 10);
    var month     = parseInt(date1[1], 10);
        month     = month - 1;
    var day       = parseInt(date1[2], 10);

    var hour      = parseInt(time1[0], 10);
    var minute    = parseInt(time1[1], 10);
    var second    = parseInt(time1[2], 10);

    var jsDate    = new Date(year, month,  day,
                    hour, minute, second);

    return jsDate;
}
function grid\u filterMenuInit(e){
var currentFieldName=e.field;
如果(currentFieldName==“yourFieldDate”){
console.info(“忽略此字段:”);
返回;
}
console.info(“执行此字段:”);
var filterSubmit=e.container.find(“[type=submit]:eq(0)”);
$(filterSubmit)。单击(函数(){
var searchDateAfter=e.container.find(“输入:eq(0)”;
var searchDateAfter1=$(searchDateAfter1.val();
var searchDateBefore=e.container.find(“输入:等式(1)”);
var searchDateBefore1=$(searchDateBefore).val();
var gridDatasource=$(“#yourGridId”).data(“kendoGrid”).dataSource;
var jsDateBefore=null;
var jsDateAfter=null;
//我们必须将kendoDateTime转换为JavaScript DateTime对象
//在我的例子中,日期时间格式是:yyyy/MM/dd HH:MM:ss
如果(searchDateBefore1!的类型==“未定义”){
jsDateBefore=newJsDate(searchDateBefore1);
}
如果(类型为searchDateAfter1!=“未定义”){
jsDateAfter=newJsDate(searchDateAfter1);
}
var previousFilter=gridDatasource.filter();
var previousFilters=新数组();
var newFilters=newarray();
//正在存储以前的筛选器。。。
if(typeof previousFilter=='object'&&previousFilter.hasOwnProperty(“过滤器”)){
previousFilters=previousFilter.filters;
对于(var i=0;i