From 7d595acfe04cfa0f03584fd58a8898e7fc92f71e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Cruz=20Romanos?= Date: Wed, 5 Feb 2014 17:15:50 +0100 Subject: [PATCH 1/2] 8556: flashes when moving between two fields --- tests/unit/datepicker/datepicker_core.js | 28 ++++++++++++++++++++++++ ui/datepicker.js | 10 +++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) 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..8beffe9204d 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 From f060059002a9cddbfb10837a405786f224a043fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Cruz=20Romanos?= Date: Thu, 6 Feb 2014 19:57:56 +0100 Subject: [PATCH 2/2] 8556: scrict comparison --- ui/datepicker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/datepicker.js b/ui/datepicker.js index 8beffe9204d..547adf77e84 100644 --- a/ui/datepicker.js +++ b/ui/datepicker.js @@ -1041,7 +1041,7 @@ $.extend(Datepicker.prototype, { if (inst.inline){ this._updateDatepicker(inst); } else { - if (!nextInst || nextInst == currentInst) { + if (!nextInst || nextInst === currentInst) { this._hideDatepicker(); } this._lastInput = inst.input[0];