要阻止Layui导航菜单特定项跳转,需HTML层用href="javascript:void(0)"或移除href,JS层在nav.on()回调中不执行window.location等跳转语句,并可对目标项添加pointer-events:none等样式禁用交互。

要阻止 Layui 导航菜单中特定菜单项的点击跳转,默认行为必须从两个层面控制:一是 HTML 层避免浏览器原生跳转副作用,二是 JS 层在监听回调中不执行任何导航操作。
1. 清除 href 的默认副作用
即使你没写 JS 跳转,只要菜单项是 <a></a> 标签且 href 值为 #、javascript:; 或为空,点击仍会触发浏览器默认行为(如滚顶、重载或无效跳转)。
- 把
href="#"改成href="javascript:void(0)"—— 最稳妥,无副作用 - 或直接移除
href属性,改用onclick绑定逻辑(但需注意可访问性) - 若用了
lay-href,Layui 会自动读取并跳转,此时不要额外写window.location,否则重复触发
2. 在 nav.on() 回调里不执行跳转逻辑
Layui 的 nav.on('click(filter)') 是自定义事件,return false 或 e.preventDefault() 无效。是否跳转,完全取决于你有没有在回调里写跳转语句。
- 检查回调函数末尾是否误写了
window.location.href = ...或window.open(...) - 对需要禁用的菜单项,用条件判断跳过跳转:例如
if (elem.text() !== '系统设置') { window.location.href = elem.attr('href'); } - 也可统一不处理跳转,只做其他操作(如弹窗、发请求、切换 tab),让导航“静默”响应
3. 针对特定项动态禁用(视觉+交互)
如果只想禁用某几个菜单项(比如“用户管理”不可点),可结合 DOM 操作与样式控制:
- 在
nav.on()回调中识别目标项文本或属性,如elem.parent().hasClass('layui-nav-itemed')或elem.closest('dd').text().trim() === '报表导出' - 匹配后立即
return,中断后续逻辑 - 同时给对应
<dd></dd>或<a></a>添加style="pointer-events:none; opacity:0.6; cursor:not-allowed;"和tabindex="-1",防止键盘聚焦和点击
4. 更规范的替代方案
原生 <a></a> + href 天然承载跳转语义。若业务本质是“点击即执行 JS”,而非导航,建议换组件:
- 用
<button type="button"></button>替代<a></a>,显式声明不提交、不跳转,保留键盘支持 - 或改用
layui.dropdown渲染按钮 + 下拉面板,完全可控,无障碍友好 - 避免强行拦截
select或a的默认行为——这会破坏 Tab 键、Enter 键及屏幕阅读器支持


















