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

使用FullCalendar开发日历遇start未定义错误,模态框日期显示异常

问题分析与解决

错误原因

  • start是FullCalendar select回调函数的局部参数,你在回调函数外部定义var tgl=moment(start).format('DD-MM-YYYY'),此时start未被定义,直接访问就会抛出ReferenceError。
  • 当前代码没有把选中的日期赋值给Bootstrap模态框的标题,所以模态框标题会显示undefined。
  • 额外问题:script标签的type和src属性被错误写在了script内容内部,应该单独作为一个script标签引入外部JS文件。

修正后的代码

<script>
document.addEventListener('DOMContentLoaded', function() {
  var calendarEl = document.getElementById('calendar');
  var calendar = new FullCalendar.Calendar(calendarEl, {          
    selectable: true,
    selectHelper: true,
    // FullCalendar v5+的select回调参数是一个info对象,包含start、end等属性
    select: function(info) {
      // 格式化选中的开始日期
      var tgl = moment(info.start).format('DD-MM-YYYY');
      // 将日期设置到模态框标题中(假设模态框标题的id是BookingModalLabel)
      document.getElementById('BookingModalLabel').textContent = '添加笔记 - ' + tgl;
      // 弹出模态框
      $("#BookingModal").modal('toggle');
    }
  });
  
  calendar.render();
});
</script>
<!-- 单独引入外部JS文件 -->
<script type="text/javascript" src="{{ url_for('static', filename='index.js') }}"></script>

关键说明

  • 把日期格式化和模态框标题赋值的逻辑放到select回调函数内部,这样才能正确获取用户选中的日期参数info.start。
  • 注意FullCalendar版本差异:如果是v5及以上版本,select回调的参数是一个包含start、end等属性的对象;如果是v4及以下旧版本,可保留select: function(start, end, alldays)写法,但同样要把日期处理逻辑放到该函数内部。
  • 确保模态框有对应的标题元素(比如Bootstrap默认的#BookingModalLabel),如果你的模态框标题id不同,需修改为对应id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:00:59