或者,您可以使用提供的.on("change", function(),而不是收听$('#[start/end datepicker id]').change。
Fiddle 或下面的 sn-p:
var interval = 7;
$(function() {
$("#sdatepicker").datepicker({
minDate: 0,
maxDate: interval
});
$("#edatepicker").datepicker({
minDate: 0
});
var today = new Date();
var target = new Date(today.getFullYear(), today.getMonth(), today.getDate() + interval);
$("#sdatepicker").datepicker("setDate", today);
$("#edatepicker").datepicker("setDate", target);
$("#sdatepicker").datepicker({
changeMonth: true,
changeYear: true,
showOn: 'button',
buttonImage: '../../../images/calendar.png',
buttonImageOnly: true,
title: 'Click to open calendar',
alt: 'Click to open calendar'
}).on("change", function() {
var start = $("#sdatepicker").datepicker("getDate");
start.setDate(start.getDate() + interval);
$("#edatepicker").datepicker("setDate", start);
$("#edatepicker").datepicker("option", "minDate",
$("#sdatepicker").datepicker("getDate"));
});
$("#edatepicker").datepicker({
changeMonth: true,
changeYear: true,
showOn: 'button',
buttonImage: '../../../images/calendar.png',
buttonImageOnly: true,
title: 'Click to open calendar',
alt: 'Click to open calendar'
}).on("change", function() {
var start = $("#sdatepicker").datepicker("getDate");
$("#sdatepicker").datepicker("setDate", start);
$("#sdatepicker").datepicker("option", "maxDate",
$("#edatepicker").datepicker("getDate"));
});
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<p>Start Date: <input type="text" id="sdatepicker"></p>
<p>End Date: <input type="text" id="edatepicker"></p>
解释:
minDate 用于防止选择过去的日期。 0 是今天。
使用间隔,您可以在其中任何一个更改时以固定间隔更新开始/结束日期,并且限制结束日期不能小于开始日期
并且开始日期不能大于结束日期,您可以结合maxDate 和minDate:
$("#edatepicker").datepicker("option", "minDate", $("#sdatepicker").datepicker("getDate"));
和:
$("#sdatepicker").datepicker("option", "maxDate", $("#edatepicker").datepicker("getDate"));
更新
下面的fiddle 显然解决了 OP 问题discussed。片段:
var interval = 7;
$(function() {
var start;
var today = new Date();
var target = new Date(today.getFullYear(), today.getMonth(), today.getDate() + interval);
$(".txtStartDate").datepicker("setDate", today);
$(".txtEndDate").datepicker("setDate", target);
$(".txtStartDate").datepicker({
minDate: 0,
changeMonth: true,
changeYear: true,
showOn: 'button',
buttonImage: '../../../images/calendar.png',
buttonImageOnly: true,
title: 'Click to open calendar',
alt: 'Click to open calendar',
onSelect: function() {
start = $(this).datepicker("getDate");
start.setDate(start.getDate() + interval);
$(".txtEndDate").datepicker("setDate", start);
$(".txtEndDate").datepicker("option", "minDate",
$(this).datepicker("getDate"));
$(this).change();
}
}).on("change", function() {
$(".txtEndDate").datepicker("setDate", start);
$(".txtEndDate").datepicker("option", "minDate",
$(this).datepicker("getDate"));
});
$(".txtEndDate").datepicker({
minDate: 0,
changeMonth: true,
changeYear: true,
showOn: 'button',
buttonImage: '../../../images/calendar.png',
buttonImageOnly: true,
title: 'Click to open calendar',
alt: 'Click to open calendar'
});
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<p>Start Date: <input type="text" class="txtStartDate"></p>
<p>End Date: <input type="text" class="txtEndDate"></p>
$(".txtEndDate").datepicker("option","minDate", start.getDate())
不会工作,因为
var start = $(".txtStartDate").datepicker("getDate"); 被初始化,然后更新为start.setDate(start.getDate() + interval);。
这意味着start.getDate() 不会导致$(".txtStartDate").datepicker("getDate");
$(".txtEndDate").datepicker("option", "minDate",
$(".txtStartDate").datepicker("getDate")); 工作时。
另外,显然上个月不会触发 onchange 或 onselect 设置结束日期,同时调用它们两次并且提前初始化 var start; 会:
onSelect: function() {
start = $(this).datepicker("getDate");
start.setDate(start.getDate() + interval);
$(".txtEndDate").datepicker("setDate", start);
$(".txtEndDate").datepicker("option", "minDate",
$(this).datepicker("getDate"));
$(this).change();
}
}).on("change", function() {
$(".txtEndDate").datepicker("setDate", start);
$(".txtEndDate").datepicker("option", "minDate",
$(this).datepicker("getDate"));
});