마커 클릭시 오버레이 닫기

function contentclosure(parameter,…){
overlay.setMap(null);
return function(){
var overlay = new daum.maps.CustomOverlay({
content:‘정보’,
map: map,
position: parameter
});
}
}
.
.
.

daum.maps.event.addListener(marker,‘click’,contentclosure(parameter,…));

우선 코드 가독성 죄송합니다… 들여쓰기가 안되네요ㅜㅜ
마커 클릭시 오버레이를 띄우는 코드인데 다른 마커를 클릭했을 때 전에 열려있던 오버레이를 화면에서 지우고 싶어서 setMap(null)을 사용했는데 제가 생각한대로 동작하지 않네요. 도움 부탁드립니다.

addListener에 넣는 handler 함수가
이미 실행된 상태인 것 같은데요
그럼 overlay.setMap(null); 이라는 메소드는 이벤트 등록되는 시점에 실행 되버리고 끝나고
핸들러에서 리턴되는 함수만 클릭 이벤트가 발생할 때마다 실행되기 때문에 없어지지 않는 것 같네요.

return function(){
overlay.setMap(null);
var overlay = new daum.maps.CustomOverlay({
.
.
.
}

리턴함수 안에 넣었는데도 없어지지 않네요ㅜ.ㅜ
Cannot read property ‘setMap’ of undefined
이런 오류가 뜨는데 다른 방법으로 없애야 하나요

overlay라는 변수는 글로벌하게 선언하셔야 합니다.
아무것도 할당 안되어 있을 경우에는 당연히 예외처리가 필요하고요.

var overlay = null;

function contentclosure(parameter,…) {

  return function() {

    if (overlay !== null) {
      overlay.setMap(null);
    }
    
    overlay = new daum.maps.CustomOverlay({
      content:‘정보’,
      map: map,
      position: parameter
    });
  }
}

daum.maps.event.addListener(marker,‘click’,contentclosure(parameter,…));

아 해결됬습니당 ㅎㅎㅎ
도와주셔서 정말 감사합니다 ㅎㅎ

1개의 좋아요