使用Materialize折叠组件报错:M、cash未定义求助
解决Materialize Collapsible组件的
M is not defined和cash is not defined报错 我来帮你梳理下问题根源和解决办法:
核心问题分析
cash is not defined报错:cash是Materialize框架内置的轻量级DOM操作工具,它被包含在完整的Materialize核心库中。你额外引入的collapsible.js是依赖核心库运行的,缺少核心库提供的cash就会触发这个报错。M is not defined报错:M是Materialize的全局命名空间对象,只有加载完整的Materialize核心库后才会生成。虽然你引入了materialize.js,但单独加的collapsible.js打乱了加载逻辑,或者你的materialize.js并非完整版本,导致M对象无法被识别。
具体解决方案
- 移除单独的组件文件:删掉
<script src="scripts/collapsible.js"></script>这一行。完整的materialize.js已经包含了所有组件(包括collapsible)的代码,单独引入组件文件完全没必要,反而会引发依赖冲突。 - 确保核心库完整性:确认你使用的
materialize.js是Materialize官方提供的完整版本,不是自定义裁剪过的文件。 - 修正初始化代码的小细节:你的初始化代码里的
options如果没提前定义,会触发新的报错,建议要么提前声明配置对象,要么直接省略:document.addEventListener('DOMContentLoaded', function() { // 可选:定义折叠组件的配置项 // var options = { // accordion: true, // inDuration: 300 // }; var elems = document.querySelectorAll('.collapsible'); var instances = M.Collapsible.init(elems); // 如需配置就传入options }); - 保持正确的脚本引入顺序:核心库必须在你的业务脚本之前加载,最终的引入顺序应该是:
<script src="scripts/materialize.js"></script> <script src="scripts/flickity.js"></script> <script src="scripts/main.js"></script>
调整后这两个报错应该都会消失,collapsible组件也能正常初始化运行了。
内容的提问来源于stack exchange,提问作者dizzierhys
相关产品推荐
相关产品推荐

