使用jquery UI datepicker的Bug仅使用Months和Years

时间:2011-10-19 14:49:08

标签: jquery jquery-ui datepicker

我今天早些时候在SOF上找到了一段代码。

$("input[name=startDate], input[name=endDate]").datepicker({
    minDate: new Date("2008-09-01"), 
    maxDate: "+5Y",
    changeMonth: true,
    changeYear: true,
    showButtonPanel: false,
    dateFormat: 'mm.yy',
    onClose: function(dateText, inst) { 
        var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
        var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
        $(this).datepicker('setDate', new Date(year, month, 1));
    },
    beforeShow : function(input, inst) {
        if ((datestr = $(this).val()).length > 0) {
            year = datestr.substring(datestr.length-4, datestr.length);
            month = jQuery.inArray(datestr.substring(0, datestr.length-5), $(this).datepicker('option', 'monthNames'));
            $(this).datepicker('option', 'defaultDate', new Date(year, month));
            $(this).datepicker('setDate', new Date(year, month, 1));
        }
    }
});

正如您所看到的,我想在2个不同的输入上使用它们,以便能够在2个给定的月份和2个之间进行搜索。年。

第二次点击相同输入时出现问题;

  • 假设我选择 10.2011
  • 如果我点击第二次,我可以选择 01.2010 12.2010
  • 如果我点击第3次,我可以选择 01.2009 12.2009

直到达到 minDate 值( 2008 )为止。

如果你能帮我解决这个问题,我将非常高兴。

1 个答案:

答案 0 :(得分:2)

罪魁祸首是monthbeforeShow的分配。它试图从datepicker获取可读月份名称,例如“七月”。但它真正想要的只是代表月份的数字。所以,只需将该行更改为:

  var month = datestr.substring(0, datestr.length-5) - 1;

请参阅此处的演示:http://jsfiddle.net/william/GyP2u/