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