setDateDisabled + start/end 日期中断 bootstrap-datepicker

setDateDisabled + start/end date break bootstrap-datepicker

我正在使用 bootstrap-datepicker from eternicode,我反对奇怪的行为。

当我尝试使用 setDatesDisabled option on the fly with the default startDate and endDate 选项时,日期选择器似乎停止运行并且不允许我再更改月份。

最奇怪的是 alert() 就在调用 setDatesDisabled 之前的一个简单的 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,我认为这可能是一个内部错误。

这很可能是因为日期选择器 'show' 事件在您导航时多次触发,而日期选择器日历处于打开状态。

在 callendar 已经打开时设置禁用日期会导致它被重新计算和重新加载,因此它导航回到当前所选日期的月份 - 这使得无法离开所选日期的页面(没有选定日期时会发生半工作情况。

不确定这是否适用于您的情况,但如果您仅在日历未打开时设置禁用日期,这应该有效。

我改了

.on('show', function(ev){

$('.date-picker').on('click', function(ev){

这似乎工作正常,请参阅更新后的 fiddle:

https://jsfiddle.net/zj9sjspf/11/

第二个"hackish"解决方案是你可以禁用自动showOnFocus,并手动检查日历是否未打开+设置新的禁用日期+手动触发show领域正在被关注。这不是执行此操作的最佳方法,但可能是您等待对错误报告的回复时的方法;)

可以在此处查看执行此操作的一种方法: https://jsfiddle.net/zj9sjspf/13/