使用FullCalendar遇Uncaught ReferenceError等错误,求解决方法
FullCalendar 报错解决:Uncaught ReferenceError 与 datepickerLocale 未定义问题
报错信息
Uncaught ReferenceError: FullCalendar is not defined
error: Cannot read properties of undefined (reading 'datepickerLocale')
已尝试相关解决方案但问题仍未解决,以下是相关代码及修复方案:
原代码
JavaScript 部分
document.addEventListener('DOMContentLoaded', function () { var calendarEl = document.getElementById('calendar'); var calendar = new FullCalendar.Calendar(calendarEl, { locale: 'fr', eventDisplay: 'block', firstDay: 1, headerToolbar: { left: 'prev,next today', center: 'title', right: 'dayGridMonth,timeGridWeek,timeGridDay' }, locale: 'fr', editable: false, droppable: false, // this allows things to be dropped onto the calendar eventClick: function (el) { el.jsEvent.preventDefault(); $("#showEventModal").modal('show'); $("#showEventModal").on('shown.bs.modal', function (e) { $('#loading_zone').hide(); $('#target_zone').show(); }); $("#target_zone").load(decodeURIComponent( el.event.id)); console.log($("#target_zone")); } }); calendar.render(); });
HTML 部分
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>AGENDA</title> <link rel="icon" type="image/png" href="https://findicons.com/files/icons/2805/squareplex/512/google_calendar.png"> <link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <link rel="stylesheet" href="{{ asset('css/style.css') }}"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootswatch@4.5.2/dist/flatly/bootstrap.min.css" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fullcalendar@5.7.2/main.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link href='https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.13.1/css/all.css' rel='stylesheet'> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.css" integrity="sha512-63+XcK3ZAZFBhAVZ4irKWe9eorFG0qYsy2CaM5Z+F3kUn76ukznN0cp4SArgItSbDFD1RrrWgVMBY9C/2ZoURA==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <script src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js'></script> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js" integrity="sha512-GDey37RZAxFkpFeJorEUwNoIbkTwsyC736KNSYucu1WJWFK9qTdzYub8ATxktr6Dwke7nbFaioypzbDOQykoRg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> </head> <body> <div class="card mb-4 mt-3 p-2"> <div id='calendar'></div> </div> </body> <script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.7.2/locales-all.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.10.2/locale/fr.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.7.2/main.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script> <!-- DATATABLE --> </html>
修复方案
问题分析
- 版本冲突:同时引入FullCalendar v5核心文件和v3本地化文件,导致全局变量混乱,无法识别
FullCalendar对象。 - 加载顺序错误:FullCalendar核心JS文件(
main.js)应在本地化文件之前加载,否则本地化代码找不到目标对象。 - 冗余资源:重复引入Font Awesome,可能引发样式冲突。
具体修复
- 移除冲突的本地化文件:删除v3版本的法语本地化脚本
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.10.2/locale/fr.min.js"></script>,v5的locales-all.min.js已包含所有语言包。 - 调整JS加载顺序:将
main.js移到locales-all.min.js之前加载,确保核心对象先初始化。 - 清理冗余资源:移除重复的Font Awesome引入,保留其中一个即可。
修复后的HTML 头部与脚本部分
<head> <meta charset="UTF-8"> <title>AGENDA</title> <link rel="icon" type="image/png" href="https://findicons.com/files/icons/2805/squareplex/512/google_calendar.png"> <link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> <link rel="stylesheet" href="{{ asset('css/style.css') }}"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootswatch@4.5.2/dist/flatly/bootstrap.min.css" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fullcalendar@5.7.2/main.css"> <!-- 保留一个Font Awesome引入 --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.css" integrity="sha512-63+XcK3ZAZFBhAVZ4irKWe9eorFG0qYsy2CaM5Z+F3kUn76ukznN0cp4SArgItSbDFD1RrrWgVMBY9C/2ZoURA==" crossorigin="anonymous" referrerpolicy="no-referrer"/> <script src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js'></script> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js" integrity="sha512-GDey37RZAxFkpFeJorEUwNoIbkTwsyC736KNSYucu1WJWFK9qTdzYub8ATxktr6Dwke7nbFaioypzbDOQykoRg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> </head> <body> <div class="card mb-4 mt-3 p-2"> <div id='calendar'></div> </div> </body> <!-- 调整顺序:先加载核心文件,再加载本地化包 --> <script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.7.2/main.js"></script> <script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.7.2/locales-all.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script> <!-- DATATABLE --> </html>
额外说明
- FullCalendar v5 不再强制依赖Moment.js,若无需
bootstrap-datetimepicker可考虑移除Moment.js以优化资源。 - 若仅需法语本地化,可替换
locales-all.min.js为单独的法语包https://cdn.jsdelivr.net/npm/fullcalendar@5.7.2/locales/fr.min.js,减少加载体积。
内容的提问来源于stack exchange,提问作者marzouk najib
相关产品推荐
相关产品推荐

