多个月禁用在选择时移至第一个

时间:2014-08-01 20:35:14

标签: javascript jquery datepicker jquery-ui-datepicker

我遇到了这个jquery(JSFiddle Link)的问题,它允许我选择一系列日期,当我选择一个日期时,它会将我选择的日期的月份移动到第一个月。例如,我从第2个月开始选择日期,日期选择器将该月移动到显示月份列表中的第一个月。我怎么能禁用它?我只是想让它留在原地。

$(".date-picker").datepicker({
    numberOfMonths: 3,
    beforeShowDay: function(date) {
        var date1 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#date-from").val());
        var date2 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#date-to").val());
        return [true, date1 && ((date.getTime() == date1.getTime()) || (date2 && date >= date1 && date <= date2)) ? "dp-highlight" : ""];
    },
    onSelect: function(dateText, inst) {
        var date1 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#date-from").val());
        var date2 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#date-to").val());
        if (!date1 || date2) {
            $("#date-from").val(dateText);
            $("#date-to").val("");
            $(this).datepicker("option", "minDate", dateText);
        } else {
            $("#date-to").val(dateText);
            $(this).datepicker("option", "minDate", null);
        }
    }
});

2 个答案:

答案 0 :(得分:1)

正如拉米所说,这是因为在设定了最后日期后重新渲染。

为防止它跳到所选日期的月份到第一个位置,您必须添加以下行:

...
var drawMonth = $(this).data().datepicker.drawMonth; // <-- this is new

if (!date1 || date2) {
    $("#date-from").val(dateText);
    $("#date-to").val("");
    $(this).datepicker("option", "minDate", dateText);
} else {
    $("#date-to").val(dateText);
    $(this).datepicker("option", "minDate", null);
}

$(this).data().datepicker.drawMonth = drawMonth; // <-- this is new
$(this).datepicker("refresh"); // <-- this is new

这不是最优雅的解决方案,但遗憾的是,可能无法控制此行为。

答案 1 :(得分:0)

考虑到它也可能会改变一年。除了雷米和约翰内斯的回答,你可能还想补充一下:

var drawYear = $(this).data().datepicker.drawYear;

...

$(this).data().datepicker.drawYear = drawYear;