jquery ui Datepicker 重新初始化 minDate 失败
jquery ui Datepicker reInitialization of minDate fails
我有一个初始化日期选择器的函数
function initDatepickerTaskEndDate(){
//console.log(new Date(studyPhaseTimeframe.endDate));
$(".closeTaskDatePicker").datepicker({
showOn: "both",
showOtherMonths: true,
selectOtherMonths: true,
changeMonth: true,
changeYear: true,
dateFormat: "yy-mm-dd",
showWeek: true,
firstDay: 1,
showButtonPanel: true,
minDate: setMinDateForTaskCloseDatePicker(),
maxDate: studyPhaseTimeframe.endDate,
onClose: function (){// setting end date and link to call the save function
var closeDate = $(".closeTaskDatePicker").datepicker("getDate");
if(closeDate!=null){
$(".acceptCloseDate").prop("disabled",false);
}
},
}).focus(function(){
$(".ui-datepicker-calendar").css({"position":"relative"});
$(this).attr("autocomplete","off");
$(".acceptCloseDate").prop("disabled",true);
});
}
还有一个设置 minDate 的函数,我也使用另一个 Datepicker 的 getDate。
function setMinDateForTaskCloseDatePicker(){
var minDate=null;
console.log("start init close")
//set min Date to Task Close date to the biggest milestone completed date or to the biggest task schedule completion date.
//console.log($(".datepickerTaskStart").datepicker("getDate"));
console.log("set min on EndDate");
minDate=$(".datepickerTaskStart").datepicker("getDate");
console.log(minDate);
if(taskSchedulesListLength>0){
$.each(taskSchedulesList,function(index,item){
if(item.plannedDate!=null){
var newDate=new Date(item.plannedDate);
if(minDate==null && item.completedQty>0){
minDate=newDate;
}else if(minDate<newDate && item.completedQty>0){
console.log("came in");
minDate=newDate;
}
}
});
}else{
$.each(milestoneRoleBudgetList,function(index,item){
if(item.completionDate!=null){
var newDate=new Date(item.completionDate);
if(minDate==null){
minDate=newDate;
}else if(minDate<newDate){
minDate=newDate;
}
}
});
}
console.log("Min Return:");
console.log(minDate);
return minDate;
}
另外,当第二个日期选择器发生变化时,我会重新初始化这个日期选择器。
$(document).on('change','.datepickerTaskStart',function(){
initDatepickerTaskEndDate();
console.log("mminn end");
console.log($(".closeTaskDatePicker").datepicker( "option", "minDate" ));
console.log("mmaxx end");
console.log($(".closeTaskDatePicker").datepicker( "option", "maxDate" ));
});
控制台日志的结果是:
- 开始时我们有(第二个日期选择器的日期为 2019-06-03):
41:1500 start init close
41:1503 set min on EndDate
41:1505 Mon Jun 03 2019 00:00:00 GMT+0200 (Central European Summer Time)
41:1535 Min Return:
41:1536 Mon Jun 03 2019 00:00:00 GMT+0200 (Central European Summer Time)
- 更改第二个日期选择器后,初始化开始,我有所有其他结果
41:1500 start init close
41:1503 set min on EndDate
41:1505 Fri Dec 07 2018 00:00:00 GMT+0100 (Central European Standard Time)
41:1535 Min Return:
41:1536 Fri Dec 07 2018 00:00:00 GMT+0100 (Central European Standard Time)
41:2778 mminn end
41:2779 Mon Jun 03 2019 00:00:00 GMT+0200 (Central European Summer Time)
41:2780 mmaxx end
41:2781 2018-12-27
我希望 minDate 为 2018-12-27,但它仍保持在开始时的状态。
我错过了什么原因 console.log 在初始化中计算日期的函数似乎 return 日期正确。
只调用函数来设置最小和最大日期而不完全初始化修复了这个问题
我有一个初始化日期选择器的函数
function initDatepickerTaskEndDate(){
//console.log(new Date(studyPhaseTimeframe.endDate));
$(".closeTaskDatePicker").datepicker({
showOn: "both",
showOtherMonths: true,
selectOtherMonths: true,
changeMonth: true,
changeYear: true,
dateFormat: "yy-mm-dd",
showWeek: true,
firstDay: 1,
showButtonPanel: true,
minDate: setMinDateForTaskCloseDatePicker(),
maxDate: studyPhaseTimeframe.endDate,
onClose: function (){// setting end date and link to call the save function
var closeDate = $(".closeTaskDatePicker").datepicker("getDate");
if(closeDate!=null){
$(".acceptCloseDate").prop("disabled",false);
}
},
}).focus(function(){
$(".ui-datepicker-calendar").css({"position":"relative"});
$(this).attr("autocomplete","off");
$(".acceptCloseDate").prop("disabled",true);
});
}
还有一个设置 minDate 的函数,我也使用另一个 Datepicker 的 getDate。
function setMinDateForTaskCloseDatePicker(){
var minDate=null;
console.log("start init close")
//set min Date to Task Close date to the biggest milestone completed date or to the biggest task schedule completion date.
//console.log($(".datepickerTaskStart").datepicker("getDate"));
console.log("set min on EndDate");
minDate=$(".datepickerTaskStart").datepicker("getDate");
console.log(minDate);
if(taskSchedulesListLength>0){
$.each(taskSchedulesList,function(index,item){
if(item.plannedDate!=null){
var newDate=new Date(item.plannedDate);
if(minDate==null && item.completedQty>0){
minDate=newDate;
}else if(minDate<newDate && item.completedQty>0){
console.log("came in");
minDate=newDate;
}
}
});
}else{
$.each(milestoneRoleBudgetList,function(index,item){
if(item.completionDate!=null){
var newDate=new Date(item.completionDate);
if(minDate==null){
minDate=newDate;
}else if(minDate<newDate){
minDate=newDate;
}
}
});
}
console.log("Min Return:");
console.log(minDate);
return minDate;
}
另外,当第二个日期选择器发生变化时,我会重新初始化这个日期选择器。
$(document).on('change','.datepickerTaskStart',function(){
initDatepickerTaskEndDate();
console.log("mminn end");
console.log($(".closeTaskDatePicker").datepicker( "option", "minDate" ));
console.log("mmaxx end");
console.log($(".closeTaskDatePicker").datepicker( "option", "maxDate" ));
});
控制台日志的结果是:
- 开始时我们有(第二个日期选择器的日期为 2019-06-03):
41:1500 start init close
41:1503 set min on EndDate
41:1505 Mon Jun 03 2019 00:00:00 GMT+0200 (Central European Summer Time)
41:1535 Min Return:
41:1536 Mon Jun 03 2019 00:00:00 GMT+0200 (Central European Summer Time)
- 更改第二个日期选择器后,初始化开始,我有所有其他结果
41:1500 start init close
41:1503 set min on EndDate
41:1505 Fri Dec 07 2018 00:00:00 GMT+0100 (Central European Standard Time)
41:1535 Min Return:
41:1536 Fri Dec 07 2018 00:00:00 GMT+0100 (Central European Standard Time)
41:2778 mminn end
41:2779 Mon Jun 03 2019 00:00:00 GMT+0200 (Central European Summer Time)
41:2780 mmaxx end
41:2781 2018-12-27
我希望 minDate 为 2018-12-27,但它仍保持在开始时的状态。 我错过了什么原因 console.log 在初始化中计算日期的函数似乎 return 日期正确。
只调用函数来设置最小和最大日期而不完全初始化修复了这个问题