2011-09-08 4 views
1

Я использую jQuery UIDatePicker, чтобы выбрать дату рождения для потребителей на моем сайте. В настоящее время он показывает месяц и год с помощью выпадающих списков. Когда, например, я ограничиваю годы до -18y, через maxDate, выпадающий месяц не показывает все месяцы, когда выбран год 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, как, предоставленную Google AJAX API.

+0

Я не вижу никаких проблем с 1990 года это может быть 1993? –

+0

Вы правы. У меня два диапазона: 21 и 18. Я привел их в замешательство для примера. 1993 год - правильный год. –

ответ

0

Fix for jquery ui 1.8.17 У меня также была проблема, с которой я столкнулся, чтобы изменить некоторые вещи в коде jquery. Теперь я вижу все месяцы, и я могу выбрать их, но даты будут по-прежнему не поддающимися выбору, как вы хотите.

В функции _generateHTML в если заявление вы добавите maxDraw.setMonth ('11'):

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

В функции _generateMonthYearHeader в цикл заявления еще изменить:

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'); 
... 
Смежные вопросы