2012-03-12 31 views
0

隱藏的div元素內容在第一次模態彈出顯示後被刪除。Mootools擠壓箱處理程序刪除隱藏的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內容在第一顯示了後處理函數工作正常。無法找出原因。我肯定錯過了什麼。

回答

1

因爲你的adopt的內容,它在DOM中移動到你的擠壓箱。由於您不重複使用您的擠壓箱實例並每次初始化它,因此在下一個初始化時它將清空內容區域(仍包含e)並且沒有進一步採用。

重用該實例或查看它是否支持克隆。你也可以將e移回dom,甚至可以參考onClose - 執行e.dispose()來保護它。然後做e = e || $()但保持它作爲一個作用域var和

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

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

這樣你創建你希望顯示的元素的精確副本不是全球

+0

謝謝Dimitar,以供您評論。 我結束了使用克隆處理程序,抓住第一個子元素顯示onOpen,然後處理子元素onClose。現在工作很好。 再次感謝,Dimitar。 – user1264795 2012-03-13 00:41:51

+0

你應該接受這個答案,當你有一秒鐘。 – 2012-03-13 23:17:28

2

變化(除克隆的id),然後採用處理程序爲您關閉克隆,因此您不必擔心內存泄漏。

+0

如果您解釋了爲什麼要提出這些更改以及它們如何解決問題,那麼您的回答會更好。 – Craig 2012-11-20 11:27:37