2012-03-12 3 views
0

숨겨진 div 요소 내용은 첫 번째 모달 팝업 디스플레이 이후에 제거됩니다.숨겨진 div 요소를 제거하는 Mootools squeezebox 처리기

모달은 아래의 처리기 함수를 사용하여 숨겨진 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에서 squeezebox로 이동됩니다. 매번 squeezebox 인스턴스를 재사용하지 않고 매번 초기화 할 때마다 다음 init에서 내용 영역을 비 웁니다 (여전히 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

+0

잠시 후에이 대답을 받아 들여야합니다. –

2

변화 (위해 저장 복제본의 ID)를 사용하면 클로저를 닫은 상태에서 채택 처리기가 처리하므로 메모리 누수에 대해 걱정할 필요가 없습니다.

+0

이 변경 사항을 제안하는 이유와 문제점을 해결하는 방법에 대해 설명하는 것이 더 좋을 것입니다. – Craig