Materialize CSS下拉菜单closeOnClick属性失效问题求助
问题
使用Materialize CSS框架开发网站,点击头像图标可展开下拉菜单,但点击菜单内任意子项时,菜单会自动关闭,不符合需求。尝试过以下方案均无效:
尝试过的无效方案
- 初始化时设置
closeOnClick: false:
$(".dropdown-trigger2").dropdown({ closeOnClick : false });
- 重复初始化并销毁:
$(document).ready(function(){ var elems = document.querySelectorAll('.dropdown-trigger2'); var instances = M.Dropdown.init(elems, {closeOnClick:false}); $(".dropdown-trigger2").dropdown('destroy'); $(".dropdown-trigger2").dropdown(); console.log(instances); });
- 尝试用
e.stopPropagation()阻止事件冒泡(未给出具体实现)
我的HTML结构
<a class="dropdown-trigger2 btn-user waves-effect waves-light guided-tour-notification-disabled drop-btn" href="#!" data-target="dropdown1"> <img alt="avatar" src="../img/avatar-placeholder.svg"> </a> <ul id="dropdown1" class="dropdown-content"> <li><a href="#">Your Profile</a></li> <li><a href="#">Settings</a></li> <li><a class="gdd" href="#!">text 1</a></li> </ul>
解决方案
1. 正确初始化下拉组件,保留closeOnClick: false配置
你之前的方案2错误地在初始化后销毁并重新不带参数初始化,导致配置被覆盖。正确做法是只初始化一次,确保配置生效:
// 原生JS初始化(Materialize官方推荐写法) document.addEventListener('DOMContentLoaded', function() { const dropdownElems = document.querySelectorAll('.dropdown-trigger2'); M.Dropdown.init(dropdownElems, { closeOnClick: false, // 核心配置:点击子项不关闭菜单 inDuration: 300, outDuration: 225 }); });
如果用jQuery,写法如下:
$(document).ready(function(){ $(".dropdown-trigger2").dropdown({ closeOnClick: false }); });
2. 阻止子项点击事件冒泡(可选补充)
如果上述配置仍未生效,可能是子项的点击事件冒泡到父容器触发关闭,给所有下拉子项添加阻止冒泡:
document.addEventListener('DOMContentLoaded', function() { // 初始化下拉 const dropdownElems = document.querySelectorAll('.dropdown-trigger2'); M.Dropdown.init(dropdownElems, { closeOnClick: false }); // 给下拉菜单的所有链接添加阻止冒泡 document.querySelectorAll('#dropdown1 li a').forEach(link => { link.addEventListener('click', function(e) { e.stopPropagation(); }); }); });
3. 排查其他干扰因素
- 检查是否有其他自定义点击事件绑定在下拉菜单或其子元素上,这些事件可能触发菜单关闭
- 确保Materialize CSS和JS文件是最新版本,旧版本可能存在配置不生效的Bug
内容的提问来源于stack exchange,提问作者kishan maharana
相关产品推荐
相关产品推荐

