Jquery ui 基于另一个日期选择器或文本框限制jquery日期选择器中的日期
我有两个文本框,上面有一个日期选择器。文本框用于开始日期和结束日期。第一个日期选择器设置为用户不能选择今天之前的日期,但可以选择将来的任何日期 如何设置第二个日期选择器,使其不能在第一个日期选择器中选择的日期之前选择日期?例如:如果今天是12/11/10,我在第一个日期选择器中选择了12/15/10,那么第二个日期选择器应该不能在12/15/10之前选择任何内容 以下是我到目前为止的情况:Jquery ui 基于另一个日期选择器或文本框限制jquery日期选择器中的日期,jquery-ui,jquery-ui-datepicker,Jquery Ui,Jquery Ui Datepicker,我有两个文本框,上面有一个日期选择器。文本框用于开始日期和结束日期。第一个日期选择器设置为用户不能选择今天之前的日期,但可以选择将来的任何日期 如何设置第二个日期选择器,使其不能在第一个日期选择器中选择的日期之前选择日期?例如:如果今天是12/11/10,我在第一个日期选择器中选择了12/15/10,那么第二个日期选择器应该不能在12/15/10之前选择任何内容 以下是我到目前为止的情况: $("#txtStartDate").datepicker({ minDate: 0 }); $("#tx
$("#txtStartDate").datepicker({ minDate: 0 });
$("#txtEndDate").datepicker({});
从纯UI的角度来看,您不应该这样做。如果用户在两个日期选择器上都选择了错误的月份,并试图选择正确的月份,那么他有50%的变化会受到UI的阻碍。理想情况下,您应该允许错误的选择,并显示一条有用的错误消息,指出结束日期应在结束日期之后 如果您希望实现您的想法:为每个日期采集器提供一个更改事件,以适当地更改另一个日期采集器上的选项。使用第一个日期采集器UI的getDate方法,并将其传递给第二个日期采集器的minDate选项:
$("#txtEndDate").datepicker({
showOn: "both",
minDate: $("#txtStartDate").datepicker("getDate")
});
更新:
上述方法只在创造时间上设置心智。
我使用onSelect事件更改第二个日期选择器的minDate选项,如下所示:
$("#txtStartDate").datepicker({
showOn: "both",
onSelect: function(dateText, inst){
$("#txtEndDate").datepicker("option","minDate",
$("#txtStartDate").datepicker("getDate"));
}
});
例如,在此示例代码中,startDatePicker被选择为2010-12-12,startDatePicker的change event设置endDatePicker 2010-12-13的minDate。它在此日期之前锁定单元格。这是@Victor提到的一个例子。我希望它能对…Ozlem…有所帮助
$("#startDatePicker").datepicker({
dateFormat: 'yy-mm-dd',
changeMonth: true,
minDate: new Date(),
maxDate: '+2y',
onSelect: function(date){
var selectedDate = new Date(date);
var msecsInADay = 86400000;
var endDate = new Date(selectedDate.getTime() + msecsInADay);
//Set Minimum Date of EndDatePicker After Selected Date of StartDatePicker
$("#endDatePicker").datepicker( "option", "minDate", endDate );
$("#endDatePicker").datepicker( "option", "maxDate", '+2y' );
}
});
$("#endDatePicker").datepicker({
dateFormat: 'yy-mm-dd',
changeMonth: true
});
使用此代码:
试试这个男人:
$("#dateTo").datepicker({
dateFormat: 'dd/mm/yy',
changeMonth: true,
changeYear: true,
minDate: new Date()
}).datepicker("setDate", new Date());
$("#dateFrom").datepicker({
dateFormat: 'dd/mm/yy',
changeMonth: true,
changeYear: true,
onSelect: function(){
$('#dateTo').datepicker('option', 'minDate', $("#dateFrom").datepicker("getDate"));
}
}).datepicker("setDate", new Date());
在底部添加$txtEndDate.datepicker后,锡人的解决方案对我有效
$("#txtStartDate").datepicker({
showOn: "both",
onSelect: function(dateText, inst){
$("#txtEndDate").datepicker("option","minDate",
$("#txtStartDate").datepicker("getDate"));
}
});
$("#txtEndDate").datepicker(); //it is not working with out this line
我有两个日期选择器开始和结束。
结束日期最小值和最大日期是根据从开始选择设置的。
结束日期选择器的最小开始日期是“开始选择器选择”中的开始日期。
结束日期选取器的最大结束日期为从开始日期选取器开始的开始日期+7天
function setMinEndDateValue($startDateCtrl, $endDateCtrl) {
var $maxSchedulingDate = new Date(@MaxDate.Year, @MaxDate.Month -1, @MaxDate.Day );
var $startDate = $startDateCtrl.val();
var $selectedStartDate = new Date($startDate);
$selectedStartDate.setDate($selectedStartDate.getDate() + 7); // increasing the start date by 7 days (End Date max)
var $maxEndDate = new Date();
if ($selectedStartDate > $maxSchedulingDate) {
$maxEndDate = $maxSchedulingDate;
}
else {
$maxEndDate = $selectedStartDate;
}
$endDateCtrl.datepicker("option", "minDate", $startDate);
$endDateCtrl.datepicker("option", "maxDate", $maxEndDate);
}
基于此线程中前面的答案,我觉得一个使用默认值并重新应用最小和最大日期的解决方案将非常有用:
// Defaults
var defaultFromDate = new Date();
var defaultToDate = new Date();
defaultToDate.setMonth(defaultToDate.getMonth() + 1);
// To
$("#datepickerTo").datepicker({
dateFormat: "yy-mm-dd",
changeMonth: true,
changeYear: true,
});
$("#datepickerTo").datepicker("setDate", defaultToDate);
function limitToDateSpan(currentFromDate) {
$("#datepickerTo").datepicker("option", "minDate", currentFromDate);
var maxDate = new Date(currentFromDate.getTime());
maxDate.setFullYear(maxDate.getFullYear() + 1);
$("#datepickerTo").datepicker("option", "maxDate", maxDate);
}
limitToDateSpan(defaultFromDate);
// From
$("#datepickerFrom").datepicker({
dateFormat: "yy-mm-dd",
changeMonth: true,
changeYear: true,
minDate: "2013-01-01",
maxDate: "+1Y",
onSelect: function (dateText) {
limitToDateSpan(new Date(dateText));
}
});
$("#datepickerFrom").datepicker("setDate", defaultFromDate);
非常好的一点,我正要实现这个相同的概念,然后意识到我将只使用JavaScript来显示错误!谢谢你,维克多!这是一个很好的建议,但是如何设置defaultDate而不是使用类似于TinMan建议的技术呢?这是我的解决方案。最简单、最有用的方法。谢谢!此外,endDatePicker的选择器应该是endDatePicker在经历了上述所有解决方案之后,最后,这个解决方案成功了。谢谢
function setMinEndDateValue($startDateCtrl, $endDateCtrl) {
var $maxSchedulingDate = new Date(@MaxDate.Year, @MaxDate.Month -1, @MaxDate.Day );
var $startDate = $startDateCtrl.val();
var $selectedStartDate = new Date($startDate);
$selectedStartDate.setDate($selectedStartDate.getDate() + 7); // increasing the start date by 7 days (End Date max)
var $maxEndDate = new Date();
if ($selectedStartDate > $maxSchedulingDate) {
$maxEndDate = $maxSchedulingDate;
}
else {
$maxEndDate = $selectedStartDate;
}
$endDateCtrl.datepicker("option", "minDate", $startDate);
$endDateCtrl.datepicker("option", "maxDate", $maxEndDate);
}
// Defaults
var defaultFromDate = new Date();
var defaultToDate = new Date();
defaultToDate.setMonth(defaultToDate.getMonth() + 1);
// To
$("#datepickerTo").datepicker({
dateFormat: "yy-mm-dd",
changeMonth: true,
changeYear: true,
});
$("#datepickerTo").datepicker("setDate", defaultToDate);
function limitToDateSpan(currentFromDate) {
$("#datepickerTo").datepicker("option", "minDate", currentFromDate);
var maxDate = new Date(currentFromDate.getTime());
maxDate.setFullYear(maxDate.getFullYear() + 1);
$("#datepickerTo").datepicker("option", "maxDate", maxDate);
}
limitToDateSpan(defaultFromDate);
// From
$("#datepickerFrom").datepicker({
dateFormat: "yy-mm-dd",
changeMonth: true,
changeYear: true,
minDate: "2013-01-01",
maxDate: "+1Y",
onSelect: function (dateText) {
limitToDateSpan(new Date(dateText));
}
});
$("#datepickerFrom").datepicker("setDate", defaultFromDate);
$('#start_date').datepicker({
endDate: new Date(),
autoclose: true,
}).on("changeDate", function (e) {
$('#end_date').datepicker('setStartDate', e.date);
});
$('#end_date').datepicker({
autoclose: true,
});