1

マップにピン留めするマーカーのリストを作成しようとしています。それぞれに独自のオーバーレイがあります。それはほとんど機能していますが、オーバーレイはすべて、対応するマーカーではなく、互いの上に配置されています。

コードは次のとおりです。

var myCenter = getMyLocation();

function initialize()
{
  var mapProp = {
    center: myCenter,
    zoom:9,
    mapTypeId:google.maps.MapTypeId.ROADMAP
  };

  var map = new google.maps.Map(document.getElementById("googleMap"),mapProp);

  var locations = [
    {lat: -27.646670, lng: 152.86918630, text: 'Address #1'},
    {lat: -27.6446550, lng: 152.7822390, text: 'Address #2'},
    {lat: -27.6062480, lng: 152.7889550, text: 'Address #3'}
  ];

  // Loop through our list and plot them on the map
  locations.forEach(function (l) {

    marker =  new google.maps.Marker({
      position: new google.maps.LatLng(l.lat, l.lng),
    });

    marker.setMap(map);

    // Create our infoWindow panel for our marker
    var infoWindow = new google.maps.InfoWindow({
      content: l.text
    });

    // Bind click event for our marker
    google.maps.event.addListener(marker, 'click', function () {
      infoWindow.open(map, marker);
    });
  });

}

google.maps.event.addDomListener(window, 'load', initialize);

addListener問題はクリックイベントに関係していると感じています

4

2 に答える 2

3

あなたは単に欠けていますvar

marker =  new google.maps.Marker(...

次のようにする必要があります。

var marker =  new google.maps.Marker(

markerその結果、各マーカーに固有のグローバル変数ではなく、単一のグローバル変数しかありません。

コールバック関数を使用.forEachしているため、そのコールバック関数はループの反復ごとにクロージャーを提供します。したがって、必要なのはmarker、コールバック内にローカル変数を作成して、そのクロージャーを利用することだけです。

于 2013-04-16T22:08:45.310 に答える