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

如何在FullCalendar V5中基于多复选框及多扩展属性过滤事件

FullCalendar V5 多扩展属性事件过滤实现

要同时基于cid(内容类型)和sid(平台)两个扩展属性实现事件复选框过滤,可按以下步骤修改代码:

1. 优化HTML复选框

为复选框添加data-prop属性,明确每个选项对应事件的哪个扩展属性,便于后续逻辑区分:

<input class="cs" value="Movie" type="checkbox" checked data-prop="cid">Movie
<input class="cs" value="Series" type="checkbox" checked data-prop="cid">Series
<input class="cs" value="Netflix" type="checkbox" checked data-prop="sid">Netflix
<input class="cs" value="Disney" type="checkbox" checked data-prop="sid">Disney

2. 事件数据示例

[
  { 
    id: "1", 
    title: "event1", 
    start: "2020-07-01 19:30", 
    end: "2020-07-02 19:30", 
    backgroundColor: "#39CCCC", 
    cid: "Movie", 
    sid: "Netflix" 
  }, 
  { 
    id: "2", 
    title: "event2", 
    start: "2020-07-09 19:30", 
    end: "2020-07-10 19:30", 
    backgroundColor: "#F012BE", 
    cid: "Series", 
    sid: "Disney" 
  }
]

3. 修改FullCalendar过滤逻辑

以下代码实现**“或逻辑”**:事件的cid或sid对应复选框被选中时,事件即显示;若所有复选框未选中,则隐藏所有事件。

var calendar = new FullCalendar.Calendar(document.getElementById('calendar'), {
  // 基础日历配置(如header、views等)
  events: [
    // 插入你的事件数据
    { id: "1", title: "event1", start: "2020-07-01 19:30", end: "2020-07-02 19:30", backgroundColor: "#39CCCC", cid: "Movie", sid: "Netflix" },
    { id: "2", title: "event2", start: "2020-07-09 19:30", end: "2020-07-10 19:30", backgroundColor: "#F012BE", cid: "Series", sid: "Disney" }
  ],
  eventDidMount: function(arg) {
    // 收集选中的过滤条件
    const checkedCids = [];
    const checkedSids = [];
    document.querySelectorAll(".cs:checked").forEach(checkbox => {
      const prop = checkbox.dataset.prop;
      const value = checkbox.value;
      prop === "cid" ? checkedCids.push(value) : checkedSids.push(value);
    });

    // 判断事件是否符合显示规则
    let shouldShow = false;
    if (checkedCids.includes(arg.event.extendedProps.cid) || checkedSids.includes(arg.event.extendedProps.sid)) {
      shouldShow = true;
    }
    // 无选中条件时默认隐藏所有事件(可根据需求删除此判断)
    if (checkedCids.length === 0 && checkedSids.length === 0) {
      shouldShow = false;
    }

    arg.el.style.display = shouldShow ? "block" : "none";
  }
});

calendar.render();

// 监听复选框变化,触发事件重新渲染
document.querySelectorAll(".cs").forEach(el => {
  el.addEventListener("change", () => calendar.refetchEvents());
});

切换为“与逻辑”

若需要事件的cid和sid对应复选框同时被选中才显示,只需修改shouldShow的判断条件:

let shouldShow = false;
// 仅当cid和sid都匹配选中条件时显示
if (checkedCids.includes(arg.event.extendedProps.cid) && checkedSids.includes(arg.event.extendedProps.sid)) {
  shouldShow = true;
}

核心逻辑说明

  • 先按属性分组收集所有选中的过滤值,避免遍历复选框时重复判断事件状态;
  • 根据业务需求(或/与逻辑)判断事件是否符合显示条件;
  • 复选框状态变更时,调用refetchEvents()触发eventDidMount,重新执行过滤逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:50:50