• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

이벤트리스너 추가부분 질문..

22.02.19 20:05 작성 조회수 147

0

안녕하세요. 강의 수강하다가 해결못하는 부분이 있어서 질문드립니다. 코드는 똑같은 것 같은데, 인포윈도우를 띄웠을 때, 마커 두개에 두번째 데이터(마지막 데이터)가 표시되는데 원인을 못찾고 있어요.ㅠㅠ
첫번째 for문에서 리스트에 각각 두개가 들어가는 것까진 확인했는데 원인이 뭔지
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <title>BARRIER FREE</title>
    <link rel="stylesheet" href="/stylesheets/style.css"/>
    <script type="text/javascript" src="https://openapi.map.naver.com/openapi/v3/maps.js?ncpClientId=2t3ojlwea9"></script>
</head>
<body>
<div id="navbar">barrier free</div>
<div id="infobox"> 
  <form action="">
    <div id="infotitle">filter</div>
    <label for="filter"></label><br>
    <select name="categories" id="categories">
      <option value="all">All</option>
      <option value="cosmetics">화장품</option>
    </select> 
    <!-- <input type="submit" value="Submit"> -->
  </form>
</div>
<div id="map" style="width:100%;height: 100vh"></div>


<script type="text/javascript" src="/data/data.js"></script>

<script>
var mapOptions = {
    center: new naver.maps.LatLng(37.48124681977143, 126.95270482812877),
    zoom: 17
};

var map = new naver.maps.Map('map', mapOptions);
var markerList=[];
var infowindowList=[];

for (var i in data){
    var target = data[i];
    var latlng = new naver.maps.LatLng(target.lat,target.lng); 
    marker = new naver.maps.Marker({
      map:map,
      position: latlng,
      icon:{
        content:"<div class='marker'></div>",
        anchor : new naver.maps.Point(12,12)
      }
    });


    var content=`<div class='infowindow_wrap'>
    <div class='infowindows_title'> ${target.title}
    <div class='infowindows_store'>${target.store}
    <div class='infowindows_category'>${target.category}
    <div class='infowindows_detail'>${target.detail}
    </div>  `

    var infowindow = new naver.maps.InfoWindow({
    content : content,
    backgroundColor : "#00ff0000",
    borderColor :  "#00ff0000",
  anchorSize : new naver.maps.Size(0,0)
  })

  markerList.push(marker);
  infowindowList.push(infowindow);

}
 
 
for(var i=0;  i<2;i++){
  naver.maps.Event.addListener(markerList[i],"click",getClickHandler(i));
}

function getClickHandler(i){

  return function(){
    var marker = markerList[i];
    var infowinidow=infowindowList[i];

    if(infowindow.getMap()){//infowindow가 표시되어있는지
        infowindow.close();
    }else{
      infowindow.open(map,marker)
    }
  }
}

</script>
</body>
</html>
도움을 받을 수 있을까요..

답변 2

·

답변을 작성해보세요.

0

질문 주셔서 감사합니다:)

해당 코드로 시험해본 결과 어디서 오류가 나는지 확인하기 위해서는 

화면과 개발자 콘솔 화면을 캡쳐해서 보내주시면 더 빠르게 해결이 가능할 것 같습니다~!!

다소 번거롭더라도 빠르게 해결 해보도록 하겠습니다.

 

감사합니다~!!

0

닉네임님의 프로필

닉네임

질문자

2022.02.19

for(var i=0;  i<2;i++){
  naver.maps.Event.addListener(markerList[i],"click",getClickHandler(i));
}

이부분에서 변수를 상수 2로 바꿔보긴했는데 이전에 변수로 선언했을 때도 결과는 같았습니다