Boostrap datepicker,每月动态禁用日期

我可以禁用日期:

$('#datepicker').datepicker({ todayHighlight: true, datesDisabled: ['03/06/2017', '03/21/2017','04/14/2017'] }); 

但是根据我的使用案例,由于您可以通过日历过去一年,我可以在2017年365天中有300个禁用日,2016年中有365个禁用日。

我想优化,想象5年后,他可以有2500个残疾人加载日。 有人知道如何动态地做,我的意思是,每次改变当前月份。

或者另一种方法呢?

您可以使用setDatesDisabled动态更新已禁用的日期,并且您可以侦听视图更改,为changeMonthchangeYearchangeDecadechangeCentury事件添加处理程序。

编辑:正如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 ), changeYearchangeDecadechangeCentury事件将触发更新,这将导致选择器恢复到当前视图日期发生的月份。

要防止这种情况,您只需在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); });