0

隐藏的 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 内容在第一次显示后就消失了。很难弄清楚原因。我肯定错过了什么。

4

2 回答 2

2

因为你adopt是内容,所以它在 DOM 中移动到你的挤压箱。由于您不重复使用您的挤压盒实例并每次都对其进行初始化,因此在下一次初始化时,它将清空内容区域(仍然包含 e)并且没有进一步采用。

重用实例或查看它是否支持克隆。您也可以将 e 移回 dom 甚至只是作为参考 onClose - 执行 e.dispose() 来保护它。然后e = e || $()将其保留为作用域变量而不是全局变量

于 2012-03-12T20:32:16.450 回答
2

改变

if (e = $('modalcontainer')) {

var e = $('modalcontainer'); 
var e = e.clone(); 
if (e) {

这样,您可以创建要显示的元素的精确副本(保存克隆的 id),然后采用处理程序在关闭时为您处理克隆,因此您不必担心内存泄漏。

于 2012-11-20T11:04:19.023 回答