2012-10-18 3 views
0

for 루프를 통해 XML에서 Google Map에 여러 마커를 추가하고 있습니다. infowindow에 대한 마커를 클릭하면 '정의되지 않은 메소드 열기'라는 오류가 발생합니다. 여기서 내가 뭘 잘못하고 있니? 내가 markers.length 동일하다 당신은 [I] .open 값을 정보창을 실행하는 시점에서infowindow '가 정의되지 않은'open '메서드를 호출 할 수 없습니다.

infobox[i] = google.maps.event.addListener(marker,'click',function() { 
    return function (windowToOpen) { 
     windowToOpen.open(the_Map,marker); 
    }(infoWindow[i]); 
}); 
+0

@CristianoFontes, 그래이 파일의 다른 모든 글로벌 변수와의 js 파일의 맨 위에 선언과 같은 : var에 정보창 = { }; – Hat

답변

1

:

jQuery를

var markers = xml.documentElement.getElementsByTagName('marker'); 
//function to create unique id 
var getMarkerUniqueId = function(lat, lng) { 
    return lat + '_' + lng; 
} 
//function to get lat/lng 
var getLatLng = function(lat,lng) { 
    return new google.maps.LatLng(lat, lng); 
} 
//cycle through and create map markers for each xml marker 
for (var i = 0; i < markers.length; i++) { 
    //create vars to hold lat/lng from database 
    var lat = parseFloat(markers[i].getAttribute('lat')); 
    var lng = parseFloat(markers[i].getAttribute('lng')); 
    //create a unique id for the marker 
    var markerId = getMarkerUniqueId(lat, lng); 
    var name = markers[i].getAttribute('Type'); 
    var html = '<b>' + name + '</b>'; 
    //create the marker on the map 
    var marker = new google.maps.Marker({ 
     map: the_Map, 
     position: getLatLng(lat, lng), 
     id: 'marker_' + markerId 
    }); 
    //put the markerId into the cache 
    markers_arr[markerId] = marker; 
    infoWindow[i] = new google.maps.InfoWindow({ 
     content: html, 
     position: getLatLng(lat, lng), 
    }); 
    infobox[i] = google.maps.event.addListener(marker,'click',function() { 
     infoWindow[i].open(the_Map,marker); 
    }); 
} 
2

당신은 폐쇄가 필요합니다. 당신은 각각의 정보창에 대한 컨텍스트를 작성해야합니다

변형 된 코드 :

function createContext (marker, iw){ 

    google.maps.event.addListener(marker,'click',function() { 
     iw.open(the_Map,marker); 
/}); 
} 
for (var i = 0; i < markers.length; i++) { 
    .... 
infobox[i] = createContext(marker, infoWindow[i]); 

} 
+0

그는 addListener를'this'에 너무 정확하게 바인딩 할 수 있습니까? –

+0

이렇게 생각하지 마라. '이'가 클릭 된 요소가 될 것이다. – jbabey

관련 문제