문제

Follwoing 코드는 JSON 객체를 통해 루프를 통해 Google지도에 마커를 배치합니다. 잘 작동합니다.

function displayMarkers(data){
    for(var i = 0; i < data.Lat.length; i++){
        var point = new GLatLng(data.Lat[i],data.Lng[i]);
        marker = new GMarker(point);
        map.addOverlay(marker);

            // here's the problem
        GEvent.addListener(marker, "click", function(){
            alert(data.Name[i]);
        });
    }
}

문제는 모든 마커가 항상 "i"의 마지막 값으로 응답한다는 것입니다. 데이터 객체에서 올바른 정보를 얻기 위해 클릭 한 마커를 식별하는 방법을 알아 내려고 노력하고 있습니다.

나는 마커 위치를 기반으로 루프 할 수있는 마커 배열을 만드는 것에 대해 생각하고 있지만, 그것은 나에게는 실제로 비효율적입니다.

항상 그렇듯이 모든 도움이 감사합니다.

도움이 되었습니까?

해결책

그만큼 지도의 이벤트를 클릭하십시오 세 가지 다른 요소를 통과합니다.

GEvent.addListener(map, "click", function(overlay, latlng, overlaylatlng) {
  // overlay = GOverlay or null
  // latlng = GLatLng
  // overlaylatlng = GLatLng or null
});

사용자가 오버레이를 클릭하지 않으면 '오버레이'및 '오버레이 라일트'가 널이됩니다.

업데이트: Goverlay를 꺼내려면 리스너를지도에 추가해야합니다 (마커가 아님). 그만큼 Gmarker의 이벤트를 클릭하십시오 glatlng 만 반환합니다.

다른 팁

지도는 ONTAP 이벤트를 지원하며 선택한 마커의 인덱스를 전달합니다. 이것 예시:

위의 솔루션은 마커의 좌표 만 반환하여 내 문제를 해결하지 못하는 것 같습니다. 아마도 내가 뭔가 잘못하고있을 것입니다.

그러나 내가 해결 한 방식은 단순히 이와 같은 마커에 속성을 추가하는 것이 었습니다.

function createMarker(latlng,name) {
      var marker = new GMarker(latlng);

      // HERE WE GO
      marker.value = name;

      GEvent.addListener(marker,"click", function() {
        addToList(this.value);
      });
      return marker;
}

업데이트 : Aboves는 한 가지 방법으로 해결하지만, 더 쉬운 방법은 주석에 언급 된대로 이벤트를지도에 첨부하는 것입니다.

GEvent.addListener(map, "click", function(marker, point){
    alert(marker);
});

파이처럼 간단합니다.

    GEvent.addListener(marker, "click", function(o){
            alert(o);
    });
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top