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

Materialize下拉菜单无法展开问题求助

Materialize下拉菜单点击无响应的问题排查与解决

我帮你梳理了代码里的几个关键问题,正是这些问题导致下拉菜单点击没反应:

核心问题分析

  • 版本不匹配:你引入的Materialize CSS是1.0.0-beta版本,但JS却是0.100.2版本,新旧版本的API和内部实现不兼容,直接导致交互功能失效。
  • 重复引入JS文件:同时加载了materialize.js和materialize.min.js,这会造成代码冲突,干扰组件初始化。
  • HTML结构错误:下拉触发按钮<a>直接放在了<ul>标签下,不符合HTML语义规范(ul的子元素必须是li),Materialize的组件依赖正确的DOM结构才能正常工作。
  • 初始化代码问题:初始化时用到的options变量没有定义,会导致JS报错中断执行。

修复后的完整代码

<head>
  <meta charset="UTF-8">
  <!-- 先引入jQuery(Materialize 1.x依赖jQuery 3.x+) -->
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <!-- 若不需要Bootstrap可移除,避免与Materialize冲突 -->
  <!-- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> -->
  <!-- 统一Materialize版本为1.0.0稳定版 -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
  <link type="text/css" rel="stylesheet" href="{% static 'css/materialize.css' %}" media="screen,projection"/>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
  <!-- 只保留一个压缩版的Materialize JS -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
</head>
<body>
  <!-- 下拉菜单内容 -->
  <ul id="dropdown1" class="dropdown-content">
    <li><a href="#!">one</a></li>
    <li><a href="#!">two</a></li>
    <li class="divider"></li>
    <li><a href="#!">three</a></li>
  </ul>

  <nav>
    <div class="container-fluid">
      <div class="nav-wrapper">
        <!-- 修正结构:触发按钮放在li内部 -->
        <ul class="show-on-small right" id="menu">
          <li>
            <a class="dropdown-trigger" href="#!" data-target="dropdown1" style="color: white;">
              <i class="fa fa-tasks" aria-hidden="true"></i> Menu
            </a>
          </li>
        </ul>
      </div>
    </div>
  </nav>

  <!-- 修复初始化代码:定义options(或使用默认值) -->
  <script>
    document.addEventListener('DOMContentLoaded', function() {
      // 可自定义配置项,或传空对象{}使用默认设置
      var options = {
        // 示例配置:hover: false, coverTrigger: false
      };
      var elems = document.querySelectorAll('.dropdown-trigger');
      var instances = M.Dropdown.init(elems, options);
    });
  </script>
</body>

额外注意事项

  • 如果项目同时需要Bootstrap和Materialize,要注意两者的样式和JS可能存在冲突,建议尽量只使用一个UI框架,或者做冲突隔离。
  • 确保{% static 'css/materialize.css' %}引入的本地样式仅用于自定义需求,不要覆盖框架核心样式。

内容的提问来源于stack exchange,提问作者Adam LaMorre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:54:23