【问题标题】:Multiple months disable moving to first on select多个月禁用移动到第一个选择
【发布时间】:2014-08-01 20:35:14
【问题描述】:

我遇到了这个 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);
        }
    }
});

【问题讨论】:

  • 这种行为是因为 $(this).datepicker("option", "minDate", dateText); 这行当您设置 minDate 并隐藏您禁用的日期时重新​​呈现日历,从而将您的选择移动到第一个。

标签: javascript jquery datepicker jquery-ui-datepicker


【解决方案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

这不是最优雅的解决方案,但不幸的是,可能没有控制这种行为的选项。

【讨论】:

    【解决方案2】:

    还要考虑到它也可能改变年份。除了 Remy 和 johannes 的回答,您可能还想补充:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-12
      • 2013-08-25
      • 2015-10-14
      • 2017-02-19
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多