Skip to content

Commit 98c53d8

Browse files
committed
Datepicker: Only generate yearshtml once. Fixes #7176 - Datepicker shows only single year in year dropdown if numberOfMonths > 1.
1 parent 255a8db commit 98c53d8

File tree

1 file changed

+36
-34
lines changed

1 file changed

+36
-34
lines changed

ui/jquery.ui.datepicker.js

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1579,40 +1579,42 @@ $.extend(Datepicker.prototype, {
15791579
if (!showMonthAfterYear)
15801580
html += monthHtml + (secondary || !(changeMonth && changeYear) ? ' ' : '');
15811581
// year selection
1582-
inst.yearshtml = '';
1583-
if (secondary || !changeYear)
1584-
html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
1585-
else {
1586-
// determine range of years to display
1587-
var years = this._get(inst, 'yearRange').split(':');
1588-
var thisYear = new Date().getFullYear();
1589-
var determineYear = function(value) {
1590-
var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) :
1591-
(value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :
1592-
parseInt(value, 10)));
1593-
return (isNaN(year) ? thisYear : year);
1594-
};
1595-
var year = determineYear(years[0]);
1596-
var endYear = Math.max(year, determineYear(years[1] || ''));
1597-
year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
1598-
endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
1599-
inst.yearshtml += '<select class="ui-datepicker-year" ' +
1600-
'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
1601-
'onclick="DP_jQuery_' + dpuuid + '.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
1602-
'>';
1603-
for (; year <= endYear; year++) {
1604-
inst.yearshtml += '<option value="' + year + '"' +
1605-
(year == drawYear ? ' selected="selected"' : '') +
1606-
'>' + year + '</option>';
1607-
}
1608-
inst.yearshtml += '</select>';
1609-
//when showing there is no need for later update
1610-
if( ! $.browser.mozilla ){
1611-
html += inst.yearshtml;
1612-
inst.yearshtml = null;
1613-
} else {
1614-
// will be replaced later with inst.yearshtml
1615-
html += '<select class="ui-datepicker-year"><option value="' + drawYear + '" selected="selected">' + drawYear + '</option></select>';
1582+
if ( !inst.yearshtml ) {
1583+
inst.yearshtml = '';
1584+
if (secondary || !changeYear)
1585+
html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
1586+
else {
1587+
// determine range of years to display
1588+
var years = this._get(inst, 'yearRange').split(':');
1589+
var thisYear = new Date().getFullYear();
1590+
var determineYear = function(value) {
1591+
var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) :
1592+
(value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :
1593+
parseInt(value, 10)));
1594+
return (isNaN(year) ? thisYear : year);
1595+
};
1596+
var year = determineYear(years[0]);
1597+
var endYear = Math.max(year, determineYear(years[1] || ''));
1598+
year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
1599+
endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
1600+
inst.yearshtml += '<select class="ui-datepicker-year" ' +
1601+
'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
1602+
'onclick="DP_jQuery_' + dpuuid + '.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
1603+
'>';
1604+
for (; year <= endYear; year++) {
1605+
inst.yearshtml += '<option value="' + year + '"' +
1606+
(year == drawYear ? ' selected="selected"' : '') +
1607+
'>' + year + '</option>';
1608+
}
1609+
inst.yearshtml += '</select>';
1610+
//when showing there is no need for later update
1611+
if( ! $.browser.mozilla ){
1612+
html += inst.yearshtml;
1613+
inst.yearshtml = null;
1614+
} else {
1615+
// will be replaced later with inst.yearshtml
1616+
html += '<select class="ui-datepicker-year"><option value="' + drawYear + '" selected="selected">' + drawYear + '</option></select>';
1617+
}
16161618
}
16171619
}
16181620
html += this._get(inst, 'yearSuffix');

0 commit comments

Comments
 (0)