我正在使用bootstrap-datepicker from eternicode而我正在反对一种奇怪的行为。
当我尝试使用默认setDatesDisabled和startDate选项的动态endDate选项时,datepicker似乎freez并且不允许我更改任何一个月。
在alert()
的调用似乎纠正错误之前,最奇怪的是一个简单的setDatesDisabled
......
我最后需要使用函数作为数据提供者来动态添加一些disabledDate
简化代码:
// enable the datepicker on fields
$('.date-picker').datepicker({
format: 'yyyy-mm-dd',
startDate: '2016-04-01',
endDate: '2016-08-15',
datesDisabled: ['2016-04-21','2016-04-20','2016-04-13']
})
.on('show', function(ev){
// @TODO check why bug here...
// alert('hi'); // uncomment to patch bug
$(this).datepicker('setDatesDisabled', ['2016-04-17','2016-04-16']);
});
检查the JSFiddle以重现。
是否有人面对同样的事情/有解决方法动态禁用某些日期?
我已经在eternicode Github上制作了a bug report,因为我认为这可能是一个内部错误。
答案 0 :(得分:2)
最有可能的原因是,当datepicker日历打开时,当您导航时,datepicker 'show'
事件会多次触发。
在已打开callendar时设置禁用日期会导致重新计算并重新加载,以便导航回当前所选日期的月份 - 这使得无法导航离开具有所选日期的页面(半工作)当没有选定日期时会发生这种情况。)
不确定这是否适用于您的方案,但只有在未打开日历时设置禁用日期时才能使用此功能。
我改变了
.on('show', function(ev){
到
$('.date-picker').on('click', function(ev){
这似乎工作正常,看到更新的小提琴:
https://jsfiddle.net/zj9sjspf/11/
第二次轻微" hackish"解决方案是您可以禁用自动showOnFocus
,并手动检查日历是否未打开+在关注字段时手动设置新的禁用日期+触发器show
。这不是执行此操作的最佳方式,但在您等待对错误报告的回复时可能是要走的路;)
这里可以看到一种方法: https://jsfiddle.net/zj9sjspf/13/