From 8f503d8d3158a6bca89d52cd460aadafafd234f5 Mon Sep 17 00:00:00 2001 From: Keith Wood Date: Thu, 16 Apr 2009 10:42:04 +0000 Subject: [PATCH] Datepicker: Fixed #3861 Manually entered date does not update altField --- tests/unit/datepicker/datepicker_options.js | 11 +++++++++ ui/ui.datepicker.js | 27 +++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/tests/unit/datepicker/datepicker_options.js b/tests/unit/datepicker/datepicker_options.js index 57c19d789..52841468d 100644 --- a/tests/unit/datepicker/datepicker_options.js +++ b/tests/unit/datepicker/datepicker_options.js @@ -452,6 +452,17 @@ test('altField', function() { inp.simulate('keydown', {ctrlKey: true, keyCode: $.simulate.VK_END}); equals(inp.val(), '', 'Alt field - dp - ctrl+end'); equals(alt.val(), '', 'Alt field - alt - ctrl+end'); + // Verify alt field is updated on keyup + alt.val(''); + inp.val('06/04/2008').datepicker('show'); + inp.simulate('keyup', {keyCode: $.simulate.VK_ENTER}); + equals(inp.val(), '06/04/2008', 'Alt field - dp - manual entry'); + equals(alt.val(), '2008-06-04', 'Alt field - manual entry'); + // Verify alt field is not updated on keyup if date is invalid + inp.val('12/04/'); + inp.simulate('keyup', {keyCode: $.simulate.VK_ENTER}); + equals(inp.val(), '12/04/', 'Alt field - dp - manual entry incomplete'); + equals(alt.val(), '2008-06-04', 'Alt field - manual entry - not updated'); }); test('daylightSaving', function() { diff --git a/ui/ui.datepicker.js b/ui/ui.datepicker.js index 3e01a6ae0..b6178d703 100644 --- a/ui/ui.datepicker.js +++ b/ui/ui.datepicker.js @@ -198,7 +198,8 @@ $.extend(Datepicker.prototype, { return false; }); } - input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress). + input.addClass(this.markerClassName).keydown(this._doKeyDown). + keypress(this._doKeyPress).keyup(this._doKeyUp). bind("setData.datepicker", function(event, key, value) { inst.settings[key] = value; }).bind("getData.datepicker", function(event, key) { @@ -286,7 +287,8 @@ $.extend(Datepicker.prototype, { $target.removeClass(this.markerClassName). unbind('focus', this._showDatepicker). unbind('keydown', this._doKeyDown). - unbind('keypress', this._doKeyPress); + unbind('keypress', this._doKeyPress). + unbind('keyup', this._doKeyUp); } else if (nodeName == 'div' || nodeName == 'span') $target.removeClass(this.markerClassName).empty(); }, @@ -511,6 +513,27 @@ $.extend(Datepicker.prototype, { } }, + /* Synchronise manual entry and alternate field. */ + _doKeyUp: function(event) { + var inst = $.datepicker._getInst(event.target); + if (!$.datepicker._get(inst, 'altField')) + return true; + try { + var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'), + (inst.input ? inst.input.val() : null), + $.datepicker._getFormatConfig(inst)); + if (date) { // only if valid + $.datepicker._setDateFromField(inst); + $.datepicker._updateAlternate(inst); + $.datepicker._updateDatepicker(inst); + } + } + catch (event) { + $.datepicker.log(event); + } + return true; + }, + /* Pop-up the date picker for a given input field. @param input element - the input field attached to the date picker or event - if triggered by focus */ -- 2.39.5