Boostrap datepicker,每月动态禁用日期
我可以禁用日期:
$('#datepicker').datepicker({ todayHighlight: true, datesDisabled: ['03/06/2017', '03/21/2017','04/14/2017'] });
但是根据我的使用案例,由于您可以通过日历过去一年,我可以在2017年365天中有300个禁用日,2016年中有365个禁用日。
我想优化,想象5年后,他可以有2500个残疾人加载日。 有人知道如何动态地做,我的意思是,每次改变当前月份。
或者另一种方法呢?
您可以使用setDatesDisabled
动态更新已禁用的日期,并且您可以侦听视图更改,为changeMonth
, changeYear
, changeDecade
和changeCentury
事件添加处理程序。
编辑:正如updateViewDate: false
在这里所说,版本1.6.4
有一个修复1.7.1
的错误,你必须添加updateViewDate: false
选项。
这是我的尝试(未使用getDisabledDates
函数来模拟动态禁用日期):
function getDisabledDates(month){ if( month<0 || month>12){ return []; } var disabled = [ ['01/01/2017', '01/02/2017', '01/03/2017'], ['02/04/2017', '02/05/2017', '02/06/2017'], ['03/08/2017', '03/09/2017', '03/10/2017'], ['04/05/2017', '04/06/2017', '04/07/2017'], ['05/15/2017', '05/16/2017', '05/17/2017'], ['06/11/2017', '06/12/2017', '06/13/2017'], ['07/15/2017', '07/16/2017', '07/17/2017'], ['08/07/2017', '08/08/2017', '08/09/2017'], ['09/05/2017', '09/06/2017', '09/07/2017'], ['10/11/2017', '10/12/2017', '10/13/2017'], ['11/06/2017', '11/07/2017', '11/08/2017'], ['12/13/2017', '12/14/2017', '12/15/2017'], ]; return disabled[month]; } $('#datepicker').datepicker({ todayHighlight: true, updateViewDate: false, //datesDisabled: ['03/06/2017', '03/21/2017','04/14/2017'] }).on('changeMonth', function(e){ var month = e.date.getMonth(); var disabled = getDisabledDates(month); $('#datepicker').datepicker('setDatesDisabled', disabled); });
在changeMonth中使用任何set *方法(例如setDatesDisabled ), changeYear , changeDecade或changeCentury事件将触发更新,这将导致选择器恢复到当前视图日期发生的月份。
要防止这种情况,您只需在updateViewDate选项设置为false的情况下启动选择器。
$('#datepicker').datepicker({ todayHighlight: true, updateViewDate: false, //datesDisabled: ['03/06/2017', '03/21/2017','04/14/2017'] }).on('changeMonth', function(e){ var month = e.date.getMonth(); var disabled = getDisabledDates(month); $('#datepicker').datepicker('setDatesDisabled', disabled); });