You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FullCalendar v3 如何禁用reserved状态指定事件的拖拽功能

问题原因

FullCalendar v3 中事件的editable属性会在事件初始化、渲染前就完成拖拽、调整大小相关交互的绑定,eventRender回调触发时交互逻辑已经挂载完毕,此时直接修改event对象的editable属性不会生效。

解决方案

有两种可行实现方式:

1. 提前处理事件数据(最优方案)

在事件数据加载完成后、传入FullCalendar配置前,遍历所有事件,给status为reserved的事件手动设置editable: false,从根源上禁用对应交互,性能更高也更稳定。
示例逻辑:

// 假设你从接口拿到的原始事件数组为rawEvents
const processedEvents = rawEvents.map(event => {
  if(event.status === 'reserved') {
    event.editable = false
  }
  return event
})
// 把processedEvents传入FullCalendar的events配置项即可

2. 在eventRender中直接禁用元素交互(适配你现有代码的修改方案)

因为FullCalendar v3依赖jQuery UI的draggable实现拖拽,你可以直接在eventRender中对目标元素调用拖拽禁用方法,修改后的eventRender代码如下:

// Event render
eventRender: function(event, element) {
    if (event.status == 'reserved') {
        // 禁用元素拖拽
        element.draggable('disable');
        // 如果同时需要禁止调整事件时长,也可以加上这句
        element.resizable('disable');
        element.css({
            'background': 'lemonchiffon',
        });
    }else if(event.status == 'available'){
        element.css({
            'background': 'lightgreen',
        });
    }

    if(event.gap_beetween_slot === '0'){
        $(element).find('.fc-resizer').remove();
    }
    $(element).find('.fc-title').html(event.title);
}

内容的提问来源于stack exchange,提问作者Arthur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:48:03