diff --git a/tests/unit/datepicker/datepicker_core.js b/tests/unit/datepicker/datepicker_core.js
index 65b07e2f6ca..36a6166c980 100644
--- a/tests/unit/datepicker/datepicker_core.js
+++ b/tests/unit/datepicker/datepicker_core.js
@@ -525,4 +525,32 @@ test("mouse", function() {
"Mouse click inline - next");
});
+asyncTest( "8556: flashes when moving between two fields", function() {
+ expect( 1 );
+
+ var datepicker1 = $( "" ),
+ datepicker2 = $( "" );
+ datepicker1.appendTo( "body" );
+ datepicker2.appendTo( "body" );
+
+ datepicker1.datepicker({
+ onSelect: function () {
+ datepicker2.datepicker( "show" );
+ },
+ duration: 0
+ });
+ datepicker2.datepicker({ duration: 0});
+ datepicker1.datepicker( "show" );
+ $( "td.ui-datepicker-today a" ).trigger( "click" );
+ setTimeout(function() {
+ ok( $( "#ui-datepicker-div" ).is( ":visible" ), "second calendar is not hidden" );
+ datepicker1.datepicker( "destroy" );
+ datepicker2.datepicker( "destroy" );
+ datepicker1.remove();
+ datepicker2.remove();
+ // Needed for "widget method - empty collection" test
+ $( "#ui-datepicker-div" ).remove();
+ start();
+ });
+});
})(jQuery);
diff --git a/ui/datepicker.js b/ui/datepicker.js
index 7de51bc924d..547adf77e84 100644
--- a/ui/datepicker.js
+++ b/ui/datepicker.js
@@ -1019,7 +1019,9 @@ $.extend(Datepicker.prototype, {
_selectDate: function(id, dateStr) {
var onSelect,
target = $(id),
- inst = this._getInst(target[0]);
+ inst = this._getInst(target[0]),
+ currentInst = null,
+ nextInst = null;
dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
if (inst.input) {
@@ -1028,8 +1030,10 @@ $.extend(Datepicker.prototype, {
this._updateAlternate(inst);
onSelect = this._get(inst, "onSelect");
+ currentInst = inst;
if (onSelect) {
onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
+ nextInst = this._curInst;
} else if (inst.input) {
inst.input.trigger("change"); // fire the change event
}
@@ -1037,7 +1041,9 @@ $.extend(Datepicker.prototype, {
if (inst.inline){
this._updateDatepicker(inst);
} else {
- this._hideDatepicker();
+ if (!nextInst || nextInst === currentInst) {
+ this._hideDatepicker();
+ }
this._lastInput = inst.input[0];
if (typeof(inst.input[0]) !== "object") {
inst.input.focus(); // restore focus