后台列表点编辑,layer.open 弹出一个表单,点保存后遮罩还在,页面点不动。控制台没报错,只是弹窗没关。这类问题八成出在关闭方式上。

先确认打开的是哪一层

layer.open({type: 1, content: '#box'}) 是页面层,content 传选择器时元素不能是隐藏状态。type: 2 是 iframe 层,里面是另一个文档,子页面拿不到父页面的 layer 变量,得写 parent.layer.close(index)。很多人直接写 layer.close,提示 undefined,就是这里错了。

area 写成百分比会互相顶

area: ['600px', '400px'] 是宽高,只写一个值会当成宽度。写 ['80%', '80%'] 在小屏上可能超出视口,出现滚动条和遮罩错位。移动端可以改成 area: ['90%', 'auto'],让内容撑高度。

layer.open({type: 1, title: '编辑', area: ['600px', '420px'], content: '#formBox', end: function(){ table.reload('userTable'); }});

关闭按钮没反应

btn 数组里的回调要自己调 layer.close(index),框架不会自动关。表单提交用 lay-filter 绑定,别在按钮上写 onclick。弹窗里的 select、日期控件要在 open 成功的 success 回调里重新渲染,否则下拉点不出来。

遮罩和层级

页面里还有别的 fixed 元素时,给 layer 设 zIndex 不一定管用,检查父容器有没有 transform,它会生成新的层叠上下文。shadeClose 默认 false,想点遮罩关闭要显式打开,但表单弹窗不建议开,误触就丢了输入。

记住一条:同页面用父级 layer,iframe 里用 parent.layer,index 一路传下去,基本不会关不掉。