Skip to content

Commit 1b5af10

Browse files
Karl Kirchscottgonzalez
Karl Kirch
authored andcommitted
Datepicker: Added ability to stop datepicker from beforeShow. Fixes #7602 - Ability to stop datepicker from appearing with beforeShow event handler.
(cherry picked from commit d146297)
1 parent c5799b5 commit 1b5af10

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

tests/unit/datepicker/datepicker_tickets.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,39 @@ test('beforeShowDay-getDate', function() {
2929
inp.datepicker('hide');
3030
});
3131

32+
test('Ticket 7602: Stop datepicker from appearing with beforeShow event handler', function(){
33+
var inp = init('#inp',{
34+
beforeShow: function(){
35+
return false;
36+
}
37+
});
38+
var dp = $('#ui-datepicker-div');
39+
inp.datepicker('show');
40+
equals(dp.css('display'), 'none',"beforeShow returns false");
41+
inp.datepicker('destroy');
42+
43+
inp = init('#inp',{
44+
beforeShow: function(){
45+
}
46+
});
47+
dp = $('#ui-datepicker-div');
48+
inp.datepicker('show');
49+
equal(dp.css('display'), 'block',"beforeShow returns nothing");
50+
inp.datepicker('hide');
51+
inp.datepicker('destroy');
52+
53+
inp = init('#inp',{
54+
beforeShow: function(){
55+
return true;
56+
}
57+
});
58+
dp = $('#ui-datepicker-div');
59+
inp.datepicker('show');
60+
equal(dp.css('display'), 'block',"beforeShow returns true");
61+
inp.datepicker('hide');
62+
inp.datepicker('destroy');
63+
});
64+
3265
test('Ticket 6827: formatDate day of year calculation is wrong during day lights savings time', function(){
3366
var time = $.datepicker.formatDate("oo", new Date("2010/03/30 12:00:00 CDT"));
3467
equals(time, "089");

ui/jquery.ui.datepicker.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,7 @@ $.extend(Datepicker.prototype, {
625625
},
626626

627627
/* Pop-up the date picker for a given input field.
628+
If false returned from beforeShow event handler do not show.
628629
@param input element - the input field attached to the date picker or
629630
event - if triggered by focus */
630631
_showDatepicker: function(input) {
@@ -641,7 +642,12 @@ $.extend(Datepicker.prototype, {
641642
$.datepicker._curInst.dpDiv.stop(true, true);
642643
}
643644
var beforeShow = $.datepicker._get(inst, 'beforeShow');
644-
extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
645+
var beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
646+
if(beforeShowSettings === false){
647+
//false
648+
return;
649+
}
650+
extendRemove(inst.settings, beforeShowSettings);
645651
inst.lastVal = null;
646652
$.datepicker._lastInput = input;
647653
$.datepicker._setDateFromField(inst);

0 commit comments

Comments
 (0)