The code below should be enough to give you the idea.
The selector follows the jQuery UI widget template (another good widget tutorial here).
// attach widget to input
$(document).ready(function () {
$('#mydate').dateselector();
});
// some display formatting
Date.prototype.toMMDDYYYY = function () {
return isNaN(this) ? 'NaN' : [this.getMonth() > 8 ? this.getMonth() + 1 : '0' + (this.getMonth() + 1), this.getDate() > 9 ? this.getDate() : '0' + this.getDate(), this.getFullYear()].join('/')
}
// date selector widget
; (function ($) {
$.widget("ui.dateselector", {
options: {},
shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
_syncToSelector: function () {
var self = this;
var date = new Date($(self.element).val());
self.$container.find('select:eq(0)').val(date.getMonth());
self.$container.find('select:eq(1)').val(date.getDate());
self.$container.find('select:eq(2)').val(date.getFullYear());
},
_syncFromSelector: function () {
var self = this;
var date = new Date();
date.setFullYear(self.$container.find('select:eq(2)').val());
date.setDate(self.$container.find('select:eq(1)').val());
date.setMonth(self.$container.find('select:eq(0)').val());
$(self.element).val(date.toMMDDYYYY());
},
destroy: function () {
var self = this;
if (self.$container) self.$container.remove();
$.Widget.prototype.destroy.apply(this, arguments);
},
_init: function () {
var self = this;
var $months = $('<select></select>').change($.proxy(this._syncFromSelector, this));
for (var i = 0; i < 12; i++) { $('<option></option>').val(i).text(this.shortMonths[i]).appendTo($months); }
var $days = $('<select></select>').change($.proxy(this._syncFromSelector, this));
for (var i = 1; i <= 31; i++) { $('<option></option>').val(i).text(i).appendTo($days); }
var thisYear = new Date().getFullYear();
var $years = $('<select></select>').change($.proxy(this._syncFromSelector, this));
for (var i = -2; i <= 2; i++) { $('<option></option>').val(thisYear + i).text(thisYear + i).appendTo($years); }
self.$container = $('<span class="dateselectorContainer"></span>').append($months).append($days).append($years);
this._syncToSelector();
self.element.hide().after(self.$container);
}
});
})(jQuery);
No comments:
Post a Comment