所以在这种情况下,屏幕如下所示:
我试图将结束日期始终比开始日期大7天。因此,当我将开始日期更改为isWaypointReached
时,那么结束日期应为2019-05-01
,依此类推。
我正在使用datepicker库来完成这项工作。
代码:
2019-05-08
我实现了onchange函数以使其正常工作,但是没有任何变化,我做错了什么吗?
我的日期选择器的屏幕截图:
答案 0 :(得分:2)
或者,您可以使用提供的$('#[start/end datepicker id]').change
来收听.on("change", function()
。
Fiddle或以下代码段:
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"));
});
答案 1 :(得分:1)
不要使用输入的change
事件。使用日期选择器的onSelect
选项,当您从日期选择器中选择一个日期时,它将运行一个回调。
并且您应该使用另一个日期选择器的setDate()
方法来更改其日期。
$(".txtStartDate").datepicker({
changeMonth: true,
changeYear: true,
showOn: 'button',
buttonImage: '../../../images/calendar.png',
buttonImageOnly: true,
title: 'Click to open calendar',
alt: 'Click to open calendar',
onSelect: function(value, dp) {
var interval = 7;
var start = dp.datepicker("getDate");
start.setDate(start.getDate() + interval);
$(".txtEndDate").datepicker("setDate", start);
}
});