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

FullCalendar:eventClick修改事件URL后updateEvent不生效问题

解决FullCalendar eventClick中修改URL后updateEvent不生效的问题

我之前踩过这个一模一样的坑!问题核心在于FullCalendar对事件对象的处理逻辑——尤其是v5及以上版本,事件对象是**不可变(Immutable)**的,直接修改event.url这种属性不会被框架感知到,自然调用updateEvent也不会生效。下面给你分版本的解决方案:

针对FullCalendar v5+(推荐)

用官方提供的setProp方法来修改事件属性,这个方法会自动通知FullCalendar更新视图,不需要额外调用updateEvent:

eventClick: function(info) {
  // 直接用setProp修改url属性,框架会自动更新日历
  info.event.setProp('url', 'https://your-new-target-url.com');
}

原理是setProp会创建一个新的事件对象副本并替换旧的,同时触发日历的重新渲染,完美解决属性修改不被感知的问题。

针对FullCalendar v4及更早版本

旧版本的事件对象是可变的,但有时候直接修改后调用updateEvent仍不生效,可能是因为引用问题。可以尝试重新构造事件对象再更新:

eventClick: function(calEvent, jsEvent, view) {
  // 修改原始事件的url
  calEvent.url = 'https://your-new-target-url.com';
  // 调用updateEvent时确保传入的是修改后的事件对象
  $('#calendar').fullCalendar('updateEvent', calEvent);
}

如果还是不行,试试创建一个新的事件对象,把原事件的属性都复制过来再修改url:

eventClick: function(calEvent, jsEvent, view) {
  const updatedEvent = Object.assign({}, calEvent, {
    url: 'https://your-new-target-url.com'
  });
  $('#calendar').fullCalendar('updateEvent', updatedEvent);
}

额外排查点

  • 检查是否有其他事件监听代码(比如eventRender)在覆盖你的URL设置;
  • 确认你的updateEvent调用时机正确,比如如果是异步获取新URL,要确保在异步回调里执行更新操作;
  • 打开浏览器控制台,查看是否有报错信息,有时候权限问题或者语法错误会导致更新失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:40:52