我想在我的项目中使用jQuery-ui datepicker,但我需要能够拥有多个不相交的有效日期范围。不属于这些范围之一的日期不应该是可选择的。
$(function() {
$("#datepicker").datepicker({
numberOfMonths: 1,
minDate: new Date(2010, 8, 1), //range 1
maxDate: new Date(2010, 8, 20) //range 1
minDate: new Date(2010, 9, 1), //range 2
maxDate: new Date(2010, 9, 20) //range 2
});
});
我将如何实施此功能?我很感激任何帮助。
答案 0 :(得分:22)
您可以使用beforeShowDay
来限制显示月份的范围,如下所示:
var d1s = new Date(2010, 8, 1),
d1e = new Date(2010, 8, 20),
d2s = new Date(2010, 9, 1),
d2e = new Date(2010, 9, 20);
$(function() {
$("#datepicker").datepicker({
numberOfMonths: 1,
beforeShowDay: function(date) {
return [(date >= d1s && date <= d1e || date >= d2s && date <= d2e), ''];
},
minDate: d1s,
maxDate: d2e
});
});
或者,对于任意数量的日期范围,这是一种效率稍低但更灵活的方法:
var ranges = [ { start: new Date(2010, 8, 1), end: new Date(2010, 8, 20) },
{ start: new Date(2010, 9, 1), end: new Date(2010, 9, 20) },
{ start: new Date(2010, 10, 1), end: new Date(2010, 10, 20) } ];
$(function() {
$("#datepicker").datepicker({
numberOfMonths: 1,
beforeShowDay: function(date) {
for(var i=0; i<ranges.length; i++) {
if(date >= ranges[i].start && date <= ranges[i].end) return [true, ''];
}
return [false, ''];
},
minDate: ranges[0].start,
maxDate: ranges[ranges.length -1].end
});
});
You can give this version a try here,只按时间顺序排列范围:)