diff --git a/tests/unit/datepicker/datepicker_tickets.js b/tests/unit/datepicker/datepicker_tickets.js index c7fde60de..6edff64e8 100644 --- a/tests/unit/datepicker/datepicker_tickets.js +++ b/tests/unit/datepicker/datepicker_tickets.js @@ -29,6 +29,39 @@ test('beforeShowDay-getDate', function() { inp.datepicker('hide'); }); +test('Ticket 7602: Stop datepicker from appearing with beforeShow event handler', function(){ + var inp = init('#inp',{ + beforeShow: function(){ + return false; + } + }); + var dp = $('#ui-datepicker-div'); + inp.datepicker('show'); + equals(dp.css('display'), 'none',"beforeShow returns false"); + inp.datepicker('destroy'); + + inp = init('#inp',{ + beforeShow: function(){ + } + }); + dp = $('#ui-datepicker-div'); + inp.datepicker('show'); + equal(dp.css('display'), 'block',"beforeShow returns nothing"); + inp.datepicker('hide'); + inp.datepicker('destroy'); + + inp = init('#inp',{ + beforeShow: function(){ + return true; + } + }); + dp = $('#ui-datepicker-div'); + inp.datepicker('show'); + equal(dp.css('display'), 'block',"beforeShow returns true"); + inp.datepicker('hide'); + inp.datepicker('destroy'); +}); + test('Ticket 6827: formatDate day of year calculation is wrong during day lights savings time', function(){ var time = $.datepicker.formatDate("oo", new Date("2010/03/30 12:00:00 CDT")); equals(time, "089"); diff --git a/ui/jquery.ui.datepicker.js b/ui/jquery.ui.datepicker.js index df6bdd419..417758756 100644 --- a/ui/jquery.ui.datepicker.js +++ b/ui/jquery.ui.datepicker.js @@ -625,6 +625,7 @@ $.extend(Datepicker.prototype, { }, /* Pop-up the date picker for a given input field. + If false returned from beforeShow event handler do not show. @param input element - the input field attached to the date picker or event - if triggered by focus */ _showDatepicker: function(input) { @@ -641,7 +642,12 @@ $.extend(Datepicker.prototype, { $.datepicker._curInst.dpDiv.stop(true, true); } var beforeShow = $.datepicker._get(inst, 'beforeShow'); - extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); + var beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {}; + if(beforeShowSettings === false){ + //false + return; + } + extendRemove(inst.settings, beforeShowSettings); inst.lastVal = null; $.datepicker._lastInput = input; $.datepicker._setDateFromField(inst);