Skip to content
Permalink
Browse files

Datepicker: Fixed #3861 Manually entered date does not update altField

  • Loading branch information...
Keith Wood
Keith Wood committed Apr 16, 2009
1 parent 62f11b4 commit 8f503d8d3158a6bca89d52cd460aadafafd234f5
Showing with 36 additions and 2 deletions.
  1. +11 −0 tests/unit/datepicker/datepicker_options.js
  2. +25 −2 ui/ui.datepicker.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() {
@@ -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 */

0 comments on commit 8f503d8

Please sign in to comment.
You can’t perform that action at this time.