Featherlight关闭弹窗后无法重开,再次打开内容为空求助
解决Featherlight手动关闭后再次打开内容为空的问题
我之前也碰到过一模一样的情况!Featherlight默认是把目标DOM元素直接移到弹窗容器里,而不是复制一份内容。这就导致当你手动关闭弹窗后,原div里的内容可能没被正确放回,再次打开自然就空了。给你几个实用的解决办法:
1. 开启「保留原元素」选项(最推荐)
初始化Featherlight的时候,设置persist: true参数,这样插件会克隆一份目标div的内容来显示,原div的内容完全不动。代码示例:
// 初始化弹窗时指定persist选项 $.featherlight('#AddNewItemToMenu', { persist: true, // 核心:使用克隆内容,原元素保留不动 afterClose: function() { // 可选:如果需要在关闭后做些清理,这里可以加逻辑 } });
这样不管你关多少次弹窗,原div的内容都在,再次打开时插件会重新克隆一份,再也不会出现空内容的情况。
2. 确保手动关闭的方式正确
别自己瞎操作DOM删内容,用官方推荐的关闭方法:
// 关闭当前打开的弹窗实例(更精准) $.featherlight.current().close(); // 或者全局关闭所有Featherlight弹窗 $.featherlight.close();
用官方方法关闭的话,插件会自动处理元素的归位(如果没开persist的话),不会把原div的内容搞丢。
3. 应急方案:手动恢复原div内容(不推荐)
如果因为某些限制没法用第一个方法,可以在关闭弹窗后手动把内容放回原div。比如在afterClose回调里加逻辑:
$.featherlight('#AddNewItemToMenu', { afterClose: function() { // 把弹窗里的内容放回原div $('#AddNewItemToMenu').html($('.featherlight-content').html()); // 清理弹窗容器 $('.featherlight').remove(); } });
这个方法比较hack,能应急但不如第一种稳妥,优先选第一个方案。
小提示
- 注意Featherlight版本:旧版本可能用
clone代替persist,如果上面的参数没效果,换clone: true试试。 - 检查页面上有没有其他脚本意外删除了
#AddNewItemToMenu这个div,毕竟有时候问题不一定出在Featherlight身上。
内容的提问来源于stack exchange,提问作者Kosem
相关产品推荐
相关产品推荐

