여러개 마커에 이벤트 등록하기

    $.ajax({
     url : "${pageContext.request.contextPath}/search/getAddress.do",
     data : {
        keyword : keyword,
        place : place,
        regardlessArea : regardlessArea,
        category : category
     },
     success : function(listData) {
        var j = 0;
        var data = new Object();
        var positions = new Array();
        var geocoder = new daum.maps.services.Geocoder();
        // 주소로 좌표를 검색합니다
        for (var i = 0; i < listData.length ; i++) {
           geocoder.addressSearch(listData[i].groupAddress, function(result, status) {
              // 정상적으로 검색이 완료됐으면 
              if (status === daum.maps.services.Status.OK) {
                 positions.push({
                    "content" : '<div>카카오</div>',
                	"lat" : result[0].y,
                    "lng" : result[0].x
                 });
                 
                 j++;
                 
                 // 마커 이미지 변경
                 /* var imageSrc = '${pageContext.request.contextPath }/resources/images/search/marker.png', // 마커이미지의 주소입니다    
                 imageSize = new daum.maps.Size(40, 40), // 마커이미지의 크기입니다
                 imageOption = {offset: new daum.maps.Point(20, 38)}; // 마커이미지의 옵션입니다. 마커의 좌표와 일치시킬 이미지 안에서의 좌표를 설정합니다.
                   
                 var markerImage = new daum.maps.MarkerImage(imageSrc, imageSize, imageOption); */
                 
                 // 마커 생성 및 클러스터러에 마커 추가
                 if(j == listData.length) {
                    data = { positions };
                    var markers = data.positions.map(function(position) {
                    	return new daum.maps.Marker({
                        	position : new daum.maps.LatLng(position.lat, position.lng),
                            //image : markerImage                     	
                        });
                    });
                    for(var k = 0; k < positions.length; k++) {
                       var infowindow = new daum.maps.InfoWindow({
                           	content: data.positions[k].content // 인포윈도우에 표시할 내용
                       });
                       console.log(infowindow);

                    	daum.maps.event.addListener(markers, 'mouseover', makeOverListener(map, markers, infowindow));     // 인포윈도우 에러 부분
                        daum.maps.event.addListener(markers, 'mouseout', makeOutListener(infowindow));
                    }
                	// 인포윈도우를 표시하는 클로저를 만드는 함수입니다 
                    function makeOverListener(map, markers, infowindow) {
                         return function() {
                           infowindow.open(map, markers);
                         };
                     }

                     // 인포윈도우를 닫는 클로저를 만드는 함수입니다 
                     function makeOutListener(infowindow) {
                         return function() {
                             infowindow.close();
                         };
                     }
                        
                   clusterer.addMarkers(markers);
                 }
              }
           });
        }
        
        // 마커 클러스터러에 클릭이벤트를 등록합니다
        // 마커 클러스터러를 생성할 때 disableClickZoom을 true로 설정하지 않은 경우
        // 이벤트 헨들러로 cluster 객체가 넘어오지 않을 수도 있습니다
        daum.maps.event.addListener(clusterer, 'clusterclick', function(cluster) {
           // 현재 지도 레벨에서 1레벨 확대한 레벨
           var level = map.getLevel() - 1;

           // 지도를 클릭된 클러스터의 마커의 위치를 기준으로 확대합니다
           map.setLevel(level, {
              anchor : cluster.getCenter()
           });
        });
        
        
     }
  });

이렇게 마커랑 클러스터러 생성했는데 인포윈도우 띄우고 싶어서 코드 짜봤는데
Uncaught TypeError: a.addListener is not a function at Object.addListener 이 에러가 발생하네요 해결 방법좀 알려주세요

for (var i = 0; i < listData.length ; i++) {
           geocoder.addressSearch(listData[i].groupAddress, function(result, status) {
              // 정상적으로 검색이 완료됐으면 
              if (status === daum.maps.services.Status.OK) {
            	  console.log(result[0]);
                 positions.push({
                	"content" : '<div class="moigo-item-wrap" style="width: 200px;">'+
                    ' <div class="content-context">'+
                    ' <div class="moigo-item list-item align-left">'+
                    '<div></div>'+
                    '<div class="header-bg" style="background-image: url('+listData[cnt].groupPicture+');"></div>'+
                    '<div class="header-text-container">'+
                    '<div class="header-text">'+
                    '<div class="title-wrap">'+
                    '<input class="groupNo" type="hidden" value="'+listData[cnt].groupNo+'"/>'+
                    '<div class="title">'+listData[cnt].groupName+'</div>'+
                    '</div></div></div>'+
                    '<div class="item-contents align-left">'+
                    '<div class="location">'+listData[cnt].groupAddress+'</div>'+
                    '<span class="icon-container float-right">'+
                    '<span class="memberCount">' +listData[cnt].memberCnt+'/<span class="maxMember">'+listData[cnt].maxMember+'</span><img alt="memberIcon" src="${pageContext.request.contextPath }/resources/images/search/memberCountIcon.png"></span>'+
                    '<span class="commentCount">'+listData[cnt].postCnt+'<img alt="commentIcon" src="${pageContext.request.contextPath }/resources/images/search/commentIcon.png">'+
                    '</span></span></div></div></div></div>',
                	"lat" : result[0].y,
                    "lng" : result[0].x
                 });
                 cnt++;
                 
                 // 마커 이미지 변경
                 /* var imageSrc = '${pageContext.request.contextPath }/resources/images/search/marker.png', // 마커이미지의 주소입니다    
                 imageSize = new daum.maps.Size(40, 40), // 마커이미지의 크기입니다
                 imageOption = {offset: new daum.maps.Point(20, 38)}; // 마커이미지의 옵션입니다. 마커의 좌표와 일치시킬 이미지 안에서의 좌표를 설정합니다.
                   
                 var markerImage = new daum.maps.MarkerImage(imageSrc, imageSize, imageOption); */
                 
                 // 마커 생성 및 클러스터러에 마커 추가
                 if(cnt == listData.length) {
                	 console.log(positions);
                    data = { positions };
                    var markers = data.positions.map(function(position) {
                    	return new daum.maps.Marker({
                        	position : new daum.maps.LatLng(position.lat, position.lng),
                            //image : markerImage                     	
                        });
                    });
                    for(var n = 0; n < positions.length; n++) {
                       var infowindow = new daum.maps.InfoWindow({
                           	content: data.positions[n].content // 인포윈도우에 표시할 내용
                       });
                   	    // 마커에 mouseover 이벤트와 mouseout 이벤트를 등록합니다
                        // 이벤트 리스너로는 클로저를 만들어 등록합니다 
                        // for문에서 클로저를 만들어 주지 않으면 마지막 마커에만 이벤트가 등록됩니다
                    	daum.maps.event.addListener(markers[n], 'mouseover', makeOverListener(map, markers[n], infowindow));
                        daum.maps.event.addListener(markers[n], 'mouseout', makeOutListener(infowindow));
                    }
                	// 인포윈도우를 표시하는 클로저를 만드는 함수입니다 
                    function makeOverListener(map, marker, infowindow) {
                         return function() {
                           infowindow.open(map, marker);
                         };
                     }

                     // 인포윈도우를 닫는 클로저를 만드는 함수입니다 
                     function makeOutListener(infowindow) {
                         return function() {
                             infowindow.close();
                         };
                     }

해결했습니다.

1개의 좋아요