0

forループを介してxmlからGoogleマップに多数のマーカーを追加しています。情報ウィンドウのマーカーをクリックしてポップアップすると、「undefined のメソッド "open" を呼び出せません」というエラーが表示されます。ここで何が間違っていますか?

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);
    });
}
4

2 に答える 2

2

閉鎖が必要です:

infobox[i] = google.maps.event.addListener(marker,'click',function() {
    return function (windowToOpen) {
        windowToOpen.open(the_Map,marker);
    }(infoWindow[i]);
});
于 2012-10-18T19:36:14.200 に答える
1

infoWindow[i].open を実行した時点での i の値は、markers.length と等しくなります。情報ウィンドウごとにコンテキストを作成する必要があります

修正コード:

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]); 

}
于 2012-10-18T19:45:17.023 に答える