在第一次模态弹出显示后删除隐藏的div元素内容。
使用下面的处理函数,模态显示隐藏的div就好了,然后在清除模态后,对下面的处理函数的后续调用返回“目标不存在”的警告,隐藏的潜水元素是事实上已经消失了。
function OnSubmitHandler() {
if (e = $('modalcontainer')) {
SqueezeBox.initialize({
size : {x : 300, y : 120}
});
SqueezeBox.open(e, {
handler : 'adopt',
overlayOpacity : 0.7,
onOpen : function(){
e.style.display = 'block';
},
onClose : function(){
e.style.display = 'none';
}
});
}else{
alert('Target does not exist');
}
}
这应该很简单,并且处理函数在写入时工作正常,但隐藏的div内容在第一次显示后消失。无法弄清楚原因。我一定错过了什么。
答案 0 :(得分:2)
因为您adopt
内容,它会在DOM中移动到您的squeezebox。由于您没有重复使用您的squeezebox实例并且每次都初始化它,在下一个init中它将清空内容区域(仍然包含e)并且没有进一步采用。
重用实例或查看它是否支持克隆。你也可以将e移回dom,甚至只是作为参考onClose - 做e.dispose()来保护它。然后执行e = e || $()
但将其保留为范围变量而不是全局
答案 1 :(得分:2)
更改
if (e = $('modalcontainer')) {
到
var e = $('modalcontainer');
var e = e.clone();
if (e) {
通过这种方式,您可以创建要显示的元素的精确副本(保存克隆的ID),然后采用处理程序在关闭时为您处理克隆,因此您不必担心记忆泄漏。