Fullcalendar-限制可选择为一天

Fullcalendar-限制可选择为一天,fullcalendar,Fullcalendar,默认情况下,如果启用“可选”属性,则允许您单击、拖动并选择几天。我想只允许用户选择一天,而不是拖过多天。是否有一种方法可以启用“可选”功能,但禁用随附的拖动功能?现在不行:如果不修改源,则无法自定义可选天数的范围。在选择回调中,添加以下内容可以实现此目的: (使用moment.js的fullcalendar 2) 资源: 您可以通过将fullcalendar的“select”方法传递给dayClick事件侦听器来选择单个日期或时间: $('#myCalendar').fullcalendar(

默认情况下,如果启用“可选”属性,则允许您单击、拖动并选择几天。我想只允许用户选择一天,而不是拖过多天。是否有一种方法可以启用“可选”功能,但禁用随附的拖动功能?

现在不行:如果不修改源,则无法自定义可选天数的范围。

在选择回调中,添加以下内容可以实现此目的: (使用moment.js的fullcalendar 2)

资源:


您可以通过将fullcalendar的“select”方法传递给dayClick事件侦听器来选择单个日期或时间:

$('#myCalendar').fullcalendar({
    dayClick: function(date,jsEvent,view) {
        $('#myCalendar').fullcalendar('select', date);
    }
});

注意:您还需要在下一次回调(或dayClick)时启动“取消选择”方法。

如果您想在“日程周”视图中将突出显示限制为一天,可以使用以下方法:

  selectConstraint:{
      start: '00:01', 
      end: '23:59', 
    },
如果要限制事件,可以使用

eventConstraint:{
      start: '00:00', 
      end: '24:00', 
    },

这将仅在用户选择一天时执行

// ...
select: function(start, end){
    if(moment(start._d).add(1, 'days').format('YYYY-MM-DD')==moment(end._d).format('YYYY-MM-DD')){
            //  just select one day
    }
},
// ...

为什么不使用
选择Allow

通过将
开始
结束
时间转换为秒开始。将其与一天中的秒数进行比较

不使用矩的工作解决方案。js:

selectAllow: function (e) {
   if (e.end.getTime() / 1000 - e.start.getTime() / 1000 <= 86400) {
       return true;
   }
}
选择允许:功能(e){
如果(e.end.getTime()/1000-e.start.getTime()/1000只需:

selectAllow:function(selectInfo){
返回selectInfo.end.diff(selectInfo.start,'days')==1;
}

此配置设置在FullCalendar v5上对我有效:

selectAllow: function(selectionInfo) {
    let startDate = selectionInfo.start;
    let endDate = selectionInfo.end;
    endDate.setSeconds(endDate.getSeconds() - 1);  // allow full day selection
    if (startDate.getDate() === endDate.getDate()) {
        return true;
    } else {
        return false;
    }
}

对我来说,像这样使用selectAllow选项是有效的

selectAllow: function(selectionInfo) {
        // Don't allow creation of events over more than 1 day
        return moment(selectionInfo.start).utcOffset(false).isSame(moment(selectionInfo.end).subtract(1, 'second').utcOffset(false), 'day');
    },

我使用utcOffset(false),因为无论出于什么原因,没有它它都无法可靠地工作,我使用了减法(1,'秒')因为结束日期是包含日期的,所以如果没有它,您就无法选择一天的结束日期

是否有任何更改…这意味着添加了只选择一天的功能?当您还设置了
可选:false时,这非常有效。我不需要使用unselect。可能他们更改了一些内容?您能否举例说明它仅适用于w周视图不在月视图上?@saurabhgoyal795在日历选项中将“defaultView”设置为“agendaWeek”,您只会看到周视图对我不起作用,我现在无法选择任何日期。
selective:true
设置为+1,即使您在给定的一天上午11点开始,您仍然可以选择第二天,直到上午10点,因为总时间将为少于24小时,因此此方法不能真正满足OP需求。
selectAllow: function(selectionInfo) {
        // Don't allow creation of events over more than 1 day
        return moment(selectionInfo.start).utcOffset(false).isSame(moment(selectionInfo.end).subtract(1, 'second').utcOffset(false), 'day');
    },