嵌入fullcalendar.min.js报错:Cannot read property 'fn' of undefined求助
我之前踩过一模一样的坑!这个报错看着是jQuery版本问题,但其实大多是加载顺序、作用域或者jQuery环境被修改导致的,给你几个实用的排查和解决方向:
先确认jQuery的加载顺序绝对优先
FullCalendar是基于jQuery开发的插件,必须让jQuery在它之前完全加载完成。你的HTML脚本标签顺序一定要是:先引入jQuery,再引入FullCalendar的JS文件。比如:<!-- 正确顺序 --> <script src="jquery-3.3.1.min.js"></script> <script src="fullcalendar.min.js"></script>要是把FullCalendar放在前面,它初始化的时候找不到
jQuery.fn,就会抛出这个错误。排查是否用了
noConflict()导致$失效
如果你的项目里调用过jQuery.noConflict(),会把全局的$变量释放掉,而FullCalendar默认是用$来挂载插件的。这时候有两个解决办法:- 在引入FullCalendar之前,重新把
$绑定到jQuery:var $ = jQuery; // 把jQuery重新赋值给$ - 初始化日历的时候直接用
jQuery代替$:jQuery('#calendar').fullCalendar({ // 你的配置项 });
- 在引入FullCalendar之前,重新把
检查有没有重复加载jQuery
有时候项目里会不小心引入多个版本的jQuery(比如头部加载了3.3.1,底部又加载了一个旧版本),后面的jQuery会覆盖前面的,导致FullCalendar依赖的环境出问题。你可以打开浏览器控制台的「Network」标签,搜索jquery,看看有没有重复的请求,把多余的删掉就行。确认FullCalendar版本和jQuery的兼容性
虽然jQuery 3.3.1满足2.0+的要求,但某些旧版FullCalendar(比如v2.x早期版本)和jQuery 3.x可能存在小兼容问题。可以试试升级FullCalendar到对应兼容的版本(比如v3.x完全支持jQuery 3.x),或者去官方文档核对兼容性说明。检查脚本的作用域问题
如果你的项目用了模块化开发(比如Webpack、RequireJS),jQuery可能没有暴露在全局window对象上,导致FullCalendar找不到它。这时候需要确保jQuery被挂载到全局,或者在模块里先引入jQuery,再加载FullCalendar。
内容的提问来源于stack exchange,提问作者陳銘山

