要让 layer.msg 永不自动关闭且支持点击关闭,需显式设置 time: 0、shade: [0.2, '#000'] 和 shadeclose: true;若需点击文字关闭,则用 layer.open(type: 0) 并在 success 中绑定 click 事件调用 layer.close;跳转场景须用 requestanimationframe 确保 dom 渲染后绑定 onclick。

要在 layui 中让 layer.msg 提示框一直显示、不自动关闭,直到用户手动点击才消失,必须明确避开默认行为陷阱——因为 layui 2.8+ 版本中 【time 参数不显式传入时默认为 0,即永不关闭】,但很多人误以为“不写 time 就会 3 秒关”,结果加了 time: 0 反而冗余,或漏配 shadeClose 导致无法点击关闭。
设置永不自动关闭 + 点击遮罩关闭
第一步:调用 layer.msg 时显式传入 time: 0,并启用遮罩与遮罩点击关闭功能
layer.msg('操作已完成,请点击任意处继续', { time: 0, shade: [0.2, '#000'], shadeClose: true });
这一步最关键:shade 必须用数组格式 [透明度, 颜色],单写 shade: 0.2 在 2.8+ 中大概率失效;shadeClose: true 仅在 shade 存在时才起效。
第二步:确保遮罩层可点击
若页面已有其他遮罩(如 modal 叠加)、或遮罩透明度低于 0.1,点击将无响应。实测透明度 ≥ 0.2 才有稳定点击灵敏度。
点击提示框内容本身关闭(非遮罩)
layer.msg 原生不支持点击文字区域关闭,必须用 layer.open 模拟并手动绑定事件:
方法一:用 type: 0 模拟 msg 样式,绑定 click 关闭
const index = layer.open({
type: 0,
content: '点击此处关闭提示',
time: 0,
closeBtn: 0,
skin: 'layui-layer-msg',
success: function(layero) {
layero.on('click', function() { layer.close(index); });
}
});
注意:不能在 success 外部用 var index = layer.open(...) 后再 layero.on,因为 layero 是 DOM 元素,需在 success 内实时绑定;【layer.index 在 success 中不可靠,必须用传入的 index 变量】。
点击后跳转页面(带手动控制)
如果目标是点击提示后跳转,不要在 layer.msg 的 end 回调里跳转——它只在关闭后触发,而你要求“点击即跳”:
layer.msg('登录成功,点击进入后台', {
time: 0,
shade: [0.15, '#000'],
shadeClose: false // 关闭遮罩点击,避免干扰
});
requestAnimationFrame(() => {
const msgEl = document.querySelector('.layui-layer-msg');
if (msgEl) msgEl.onclick = () => location.href = '/admin';
});
这一步必须用 requestAnimationFrame,否则 .layui-layer-msg 元素可能尚未挂载到 DOM,querySelector 查不到。











