Skip to content

Commit d146297

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.
1 parent 7f812f8 commit d146297

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
@@ -24,6 +24,39 @@ test('beforeShowDay-getDate', function() {
2424
inp.datepicker('hide');
2525
});
2626

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