2012-03-08 2 views
0

검색 결과에 따라 마커 수가있는 google maps (api v3)를 만들었습니다. 마커를 클릭하면 정보 창이 열립니다. 정보창에 마커와 관련된 정보를 표시하는 가장 좋은 방법은 무엇입니까? 모든 마커와 관련된 정보는 아약스 요청에서받은 json 객체에 있습니다.마커 특정 infowindow에 내용을 표시하는 방법?

for (i=0; i < result.point.length; i++) { 
        var latLng = new google.maps.LatLng(result.proint[i].Latitude,result.point[i].Longitude);          
        var marker = new google.maps.Marker({ 
         position: latLng, 
         title: i.toString() 
         //map: map 
        }); 
        markersArray.push(marker); 

        var infowindow = new google.maps.InfoWindow({ 
         content: 'specific information associated to the marker clicked' 
        }); 

        google.maps.event.addListener(markersArray[i], 'click', function(event) { 
         infowindow.open(map, this); 
        }); 
+0

링크 이미 테스트를 작동 가치가있을 것입니다. – andresf

+0

여러 정보 창을 원하나요 아니면 하나만 원하십니까? 코드가 지금과 같은 방식으로 각 마커에 대해 새로운 정보창이 만들어 지지만 마지막으로 생성 된 하나만 표시됩니다. 당신의 의도가 하나뿐이라면, for 루프에서 그것의 생성을 옮겨야한다. – puckhead

+0

나는 더 많은 코드가 도움이 될 것이라는 점에 동의한다. 적어도 JSON 객체는 도움이 될 것이다. – puckhead

답변

-1

무엇을 하려는지 확실하지 않습니다. 어디서/어떤 내용을로드하려고합니까?

google.maps.event.addListener(marker, 'click', (function(event, index) { 
    return function(){ 
    infowindow.content = markersArray[index].yourcontent; 
    // or 
    infowindow.content = yourcontentarray[index]; 
    infowindow.open(map,this); 
    } 
})(marker,i)); 

마커 및 infowindow 변수가 함수 외부에 선언되어 있는지 확인하십시오.

+1

이 코드에는 몇 가지 결함이 있습니다. 첫째, ** 이벤트 **는 IIFE가 대신 반환 된 함수의 인수 여야하는 인수입니다. 여기서 이벤트는 전달 된 마커와 실제로 동일하지만 이벤트는 아닙니다. 마커는 전달 될 필요조차 없습니다. 다음으로 content 속성을 직접 설정하는 대신 infowindow의 setContent 메소드를 사용해야합니다. 이 속성을 설정하면 MVCObject의 KVO 이점을 무시합니다. 예를 들어, setContent를 사용하면 infowindow의 content_changed 이벤트가 트리거되어 해당 속성을 직접 설정하지 않습니다. – puckhead

0

당신은 루프의 상단에 귀하의 예제에서 오타 (proint)가 :

for (i=0; i < result.point.length; i++) { 
    var info_window_content = result.point[i].Latitude + '<br />'; 
    info_window_content += result.point[i].Longitue + '<br />'; 
    // etc for any value in you json object 
    // create your marker as is. 
    ... 
    var infowindow = new google.maps.InfoWindow({ 
        content: info_window_content 
       }); 
    // etc, etc. 

당신이하고있는 것처럼 당신은, 각 마커에의 EventListener를 추가 할 필요가 없습니다. 나는 그 어떤 문제도 보지 못한다. infoWindow.open (map, marker)을 사용하는 대신 이것을 사용합니다.

infoWindow.open() 이후에보다 효율적인 방법이있을 수 있습니다. infoWindow.setContent (info_window_content)

+0

감사합니다. Eric! 먼저 'this'를 사용하여 정보 창을 마커를 기준으로 배치합니다. 귀하의 솔루션을 구현했지만 콘텐츠가 정적 인 상태로 잘못되어있을 수 있습니다. 마커와 관련된 콘텐츠를로드하는 방법을 찾고 있습니다. –

2

먼저, for 루프에서 infoWindow를 생성해야합니다. 이에 클릭 이벤트를 첨부

다음, 변경 :

google.maps.event.addListener(markersArray[i], 'click', function(content) { 
    return function(event){ 
     infowindow.setContent(content); 
     infowindow.open(map, this); 
    } 
}(WHATEVER_THE_CONTENT_SHOULD_BE_FOR_THIS_MARKER)); 

당신은 대신 마커를 사용하고 싶습니다. 은 이벤트가 발생한 개체를 나타냅니다. 마커은 생성 된 마지막 마커를 나타냅니다.

+0

다음 링크는 누군가 다른 사람이 올린 글입니다. 그것은 내가 성취하려는 것을 보여주는 완벽한 예입니다. http://updates.orbitz.com/ –

+0

위 내용을 통해 원하는 것을 얻을 수 있습니다. 업데이트 된 코드를 제공 할 수 없습니까? 또한 PHP가 아닌 JavaScript 형식의 JSON 샘플이 도움이 될 것입니다. – puckhead

+0

결국 작동합니다! synthax 오류 ... 셰인, 엿 같은, 나는 당신의 도움에 대단히 감사합니다. –

6

위에서 제안한대로 infoWindow를 하나만 만듭니다.

마커 내부의 콘텐츠 가기 :

var marker = new google.maps.Marker({ 
         position: latLng, 
         title: i.toString(), 
         //set your content here 
         content:'your specific content' 
         //map: map 
        }); 

윈도우의 개방 :

google.maps.event.addListener(markersArray[i], 'click', function(event) { 
         infoWindow.setContent(this.content); 
         infowindow.open(map, this); 
        }); 
0

이 시도는, 내가 코드를 살고

// Add markers 

    for (i=0; i < result.point.length; i++) { 
        var latLng = new google.maps.LatLng(result.proint[i].Latitude, result.point[i].Longitude);          
        var marker = new google.maps.Marker({ 
         position: latLng, 
         title: i.toString() 
         //map: map 
        });      

    // marker info start 
        var infowindow = new google.maps.InfoWindow(); 

    (function (marker, result.point[i]) { 
        // add click event 
        google.maps.event.addListener(marker, 'click', function() { 
        var infoContent: "specific information associated to the marker clicked" 
        }); 
     infoWindow.setContent(infoContent); 
         infowindow.open(map, marker); 
        }); 

    // selected marker 4 infowindow 
    (marker, result.point[i]); 

     markersArray.push(marker); 
     } 
관련 문제