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