2011-09-08 172 views
1

我使用jQuery UIDatePicker为我的网站上的消费者选择出生日期。它目前通过下拉式显示月份和年份。例如,当我通过maxDate将年限制为-18y时,月份下拉式不显示选择1993年的所有月份。它只显示直到最大月份的月份。在选择器中显示日期范围外的日期范围?

在可用性测试中,我们发现,我们的人口趋于点击他们的诞生,那么一年,然后一天的一个月。

是否有办法显示所有月份,即使该月份内的日期不可选?

这里是用来显示的DatePicker代码:

$('.DobWidget').datepicker({ 
    showOn: 'both',   
    buttonImage: '/media/img/admin/icon_calendar.gif', 
    buttonImageOnly: true, 
    dateFormat: js_date_format, // mm/dd/yyyy 
    constrainInput: false, // Handled server-side for type-in. 
    changeMonth: true, 
    changeYear: true, 
    maxDate: '-18y', 
    minDate: '-110y', 
    showButtonPanel: true, 
    onChangeMonthYear: function(year, month, inst) { 
     if (inst.currentDay != 0) {  
      $(this).datepicker("setDate", new Date(year, month - 1, inst.currentDay)); 
     }     
    } 
}); 
我目前使用的jQueryUI的v.1.8.16和jQuery v.1.6.3

,两者均由谷歌AJAX API的提供。

+0

我看到1990年没有问题,难道是1993年? –

+0

你是对的。我有两个范围,21和18.我把它们混淆为例子。 1993年是正确的一年。 –

回答

0

修正了jQuery UI的1.8.17 我也有这个问题,我在由jQuery代码改变一些事情的工作。现在我看到所有的月份,我可以选择它们,但日期仍然是不可选的,只要你想。

在_generateHTML功能if语句添加maxDraw.setMonth('11' ):在

if (maxDate) { 
      maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); 
      maxDraw.setMonth('11'); 
      while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { 
       ... 
      } 
     } 

在_generateMonthYearHeader功能else语句的循环中,您更改:

for (var month = 0; month < 12; month++) { 
       if ((!inMinYear || month >= minDate.getMonth()) && 
         (!inMaxYear || month <= maxDate.getMonth())) 
        monthHtml += '<option value="' + month + '"' + 
         (month == drawMonth ? ' selected="selected"' : '') + 
         '>' + monthNamesShort[month] + '</option>'; 
      } 

变成

for (var month = 0; month < 12; month++) { 
       if ((!inMinYear || month >= minDate.getMonth()) && 
         (!inMaxYear || month <= 11)) 
        monthHtml += '<option value="' + month + '"' + 
         (month == drawMonth ? ' selected="selected"' : '') + 
         '>' + monthNamesShort[month] + '</option>'; 
      } 

在_restrictMinMax中添加maxDate.setMonth('11'):

... 
var maxDate = this._getMinMaxDate(inst, 'max'); 
     maxDate.setMonth('11'); 
     var newDate = (minDate && date < minDate ? minDate : date); 
... 

在_isInRange添加maxDate.setMonth('11' ):

var minDate = this._getMinMaxDate(inst, 'min'); 
     var maxDate = this._getMinMaxDate(inst, 'max'); 
     maxDate.setMonth('11'); 
...