jQuery版本冲突致$(...).froalaEditor非函数问题求助
解决Uncaught TypeError: $(...).froalaEditor is not a function(双jQuery版本共存问题)
核心解决思路
Froala 2.4.2对jQuery 3.x兼容性有限,且会绑定到加载时的全局jQuery实例,导致和你业务用的3.6.0版本冲突。用noConflict()正确隔离两个jQuery实例是关键,你之前可能加载顺序有误,按以下步骤操作:
一、正确的加载与隔离步骤
- 先加载Froala兼容的jQuery版本:Froala 2.4.2适配jQuery 1.11.0~2.x,选一个2.x版本(比如2.2.4)加载
- 加载Froala编辑器的JS文件:让Froala绑定到当前的jQuery实例上
- 保存Froala用的jQuery实例,释放全局变量:
var $froala = $.noConflict(true); // true参数彻底释放全局的$和jQuery - 加载业务用的jQuery 3.6.0:此时全局的
$和jQuery会指向3.6.0版本 - 用专属实例初始化Froala:业务代码用全局
$操作
示例代码:
<!-- 1. 加载Froala兼容的jQuery --> <script src="jquery-2.2.4.min.js"></script> <!-- 2. 加载Froala核心JS --> <script src="froala_editor.min.js"></script> <!-- 3. 隔离Froala用的jQuery实例 --> <script> var $froala = $.noConflict(true); </script> <!-- 4. 加载业务用jQuery 3.6.0 --> <script src="jquery-3.6.0.min.js"></script> <!-- 5. 初始化Froala编辑器 --> <script> $froala('#editor').froalaEditor({ toolbarButtons: ['bold', 'italic', 'save'], // 其他配置项 }); </script> <!-- 6. 数据库保存逻辑(用全局$即3.6.0版本) --> <script> $('#save-btn').click(function() { const editorContent = $froala('#editor').froalaEditor('html.get'); // 用jQuery 3.6.0的ajax方法提交数据 $.ajax({ url: '/api/save-content', method: 'POST', data: { content: editorContent }, success: (res) => { // 处理保存成功逻辑 } }); }); </script>
二、常见问题排查
- 禁止在加载jQuery 3.6.0后再加载Froala,否则Froala会绑定到3.6.0上,触发兼容性错误
- 检查页面是否有第三方脚本(如广告、统计代码)修改全局
$变量,导致实例混乱 - 确认Froala JS文件没有重复加载,重复加载会覆盖已绑定的方法
三、手动绑定Froala方法(备用方案)
如果Froala未自动绑定到$froala实例,可手动拷贝方法:
// 加载Froala后、执行noConflict前执行 const froalaMethod = $.fn.froalaEditor; // noConflict后绑定到专属实例 $froala.fn.froalaEditor = froalaMethod;
内容的提问来源于stack exchange,提问作者Casey
相关产品推荐
相关产品推荐

