The following code may help you. You can see the result in jsFiddle .
// Replace a select element by a ul element var convertToList = function (inst, className) { var $selectElement = inst.dpDiv.find('.' + className); var $listElement = $('<ul class="{0} dateList"></ul>'.replace('{0}', className + '-list')).appendTo($selectElement.parent()); $selectElement.children(' option').each(function () { // Replace each option of the select element by a li element $listElement.append('<li class="dateListItem" value="{0}">{1}</li>'.replace('{0}', $(this).val()).replace('{1}', $(this).text())); }); $listElement.find('.dateListItem').click(function () { // When an item is clicked, set the corresponding value in // the original select element and trigger the change event $selectElement.val($(this).val()); $selectElement.change(); }).each(function () { // Add the selectedValue class to the selected item if ($(this).val() == $selectElement.val()) { $(this).addClass('selectedValue'); } }); }; // Replace the month and year select elements var convertToDatePickerWithLists = function (inst) { setTimeout(function () { inst.dpDiv.addClass('datePickerWithLists'); convertToList(inst, 'ui-datepicker-month'); convertToList(inst, 'ui-datepicker-year'); }, 0); }; // Associate the datepicker to the text input element $("#datepicker").datepicker({ changeMonth: true, changeYear: true, beforeShow: function (input, inst) { // Modify the datepicker when it is initially displayed convertToDatePickerWithLists(inst); }, onChangeMonthYear: function (year, month, inst) { // Modify the datepicker every time the month/year is changed convertToDatePickerWithLists(inst); } });
Here are the CSS styles for the various classes:
.datePickerWithLists .ui-datepicker-year, .datePickerWithLists .ui-datepicker-month { display: none; } .datePickerWithLists .ui-datepicker-header { height: 20em; background: #D0D0D0; } .dateList { display: inline-block; list-style: none; font-size: 12px; vertical-align: top; margin: 0px; padding: 8px 0px 0px 0px; text-align: center; width: 40%; } .dateListItem { line-height: 1.4em; cursor: pointer; } .dateListItem.selectedValue { background-color: black; color: white; }
UPDATE
After discussing the specific needs of GeekOnGadgets, the code and style were adapted as shown in this jsfiddle .
ConnorsFan
source share