setDateDisabled +开始/结束日期break bootstrap-datepicker

时间:2015-11-28 00:46:49

标签: javascript jquery bootstrap-datepicker

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

当我尝试使用默认setDatesDisabledstartDate选项的动态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,因为我认为这可能是一个内部错误。

1 个答案:

答案 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/