
连续或嵌套弹窗会涉及多个打开状态、遮罩、滚动锁和焦点来源。只关闭最上面的视觉内容,不代表底层状态已恢复;应先确认业务是否需要叠加,再按实际事件顺序排查,避免盲目删除遮罩节点。
先重现最短的操作序列
记录从哪个按钮打开第一层、怎样进入第二层,以及点击关闭、Escape和遮罩后各自发生什么。管理员预览和匿名首访可能受到不同规则影响,测试时固定同一访问条件。不要同时点击多个入口后再猜最初是哪一个绑定重复。
判断能否改成单层流程
如果两层只是在展示同一组联系资料,考虑在一个弹窗里切换内容,减少叠加状态。确需多层时,应清楚谁拥有当前焦点、背景滚动锁和关闭返回目标。不要用复制一份相同弹窗来实现不同按钮文字,徒增维护与事件复杂度。

查触发事件和重复脚本
核对按钮是否同时存在链接动作、自定义JS和Elementor弹窗触发,是否一次点击执行了两条打开命令。关闭回调也要看是否针对正确实例。直接删除遮罩或强制body恢复滚动,可能让仍打开的模态层失去约束,不是可靠修复。
逐种关闭方式复核
按先开后关的顺序测试每层,确认焦点回到合理触发对象,滚动恢复且没有透明区域挡点击。检查手机固定联系条和其他弹窗叠加场景。记录最终流程中保留的触发机制,避免后续更新再次加入第二套事件。
关键区别

打开状态:每个实例独立管理;视觉隐藏不等于关闭。
遮罩滚动锁:保护模态范围;不能随手删除修补。
焦点返回:对应原触发流程;关闭顺序需验证。
怎样确认处理到位
全部关闭方式都恢复预期背景与焦点,没有透明遮罩挡住菜单或咨询按钮,手机可正常滚动,重复触发来源已被明确处理。
容易误判的边界
多层弹窗会增加理解和访问成本,优先考虑简化业务流程。本文不给出全站删除overlay的快捷代码,以免破坏其他正常模态组件。
