]> source.dussan.org Git - jquery-ui.git/commitdiff
Datepicker: Fixed #3861 Manually entered date does not update altField
authorKeith Wood <kbwood.au@gmail.com>
Thu, 16 Apr 2009 10:42:04 +0000 (10:42 +0000)
committerKeith Wood <kbwood.au@gmail.com>
Thu, 16 Apr 2009 10:42:04 +0000 (10:42 +0000)
tests/unit/datepicker/datepicker_options.js
ui/ui.datepicker.js

index 57c19d789f4a64f00bd02f2e450eae90892a765f..52841468d1519f7aba75f280b7e0563681af2332 100644 (file)
@@ -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() {
index 3e01a6ae0c4af32a4d356565bada77bdd4713ed1..b6178d703591fbb45481cdb543f9abd7666263a0 100644 (file)
@@ -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 */