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

使用Materialize折叠组件报错:M、cash未定义求助

解决Materialize Collapsible组件的M is not defined和cash is not defined报错

我来帮你梳理下问题根源和解决办法:

核心问题分析

  1. cash is not defined报错:cash是Materialize框架内置的轻量级DOM操作工具,它被包含在完整的Materialize核心库中。你额外引入的collapsible.js是依赖核心库运行的,缺少核心库提供的cash就会触发这个报错。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:54:53