r2460 - Datepicker: Fixed #3861 Manually entered date does not update altField
Author: kbwood.au
Date: Thu Apr 16 03:42:04 2009
New Revision: 2460
Modified:
trunk/tests/unit/datepicker/datepicker_options.js
trunk/ui/ui.datepicker.js
Log:
Datepicker: Fixed #3861 Manually entered date does not update altField
Modified: trunk/tests/unit/datepicker/datepicker_options.js
==============================================================================
--- trunk/tests/unit/datepicker/datepicker_options.js (original)
+++ trunk/tests/unit/datepicker/datepicker_options.js Thu Apr 16 03:42:04
2009
@@ -452,6 +452,17 @@
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() {
Modified: trunk/ui/ui.datepicker.js
==============================================================================
--- trunk/ui/ui.datepicker.js (original)
+++ trunk/ui/ui.datepicker.js Thu Apr 16 03:42:04 2009
@@ -198,7 +198,8 @@
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 @@
$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();
},
@@ -509,6 +511,27 @@
var chr = String.fromCharCode(event.charCode == undefined ?
event.keyCode : event.charCode);
return event.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) >
-1);
}
+ },
+
+ /* 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.