-1

すべてのマーカーに情報ウィンドウを追加しようとしています。しかし、最後のマーカーには InfoWindow を 1 つだけ追加します。手伝って頂けますか?

for (i = 0; i < events.length; i++) {
    var contentString = '<div id="content">'+i+'bla-bla-bla</div>';
    var infowindow = new google.maps.InfoWindow({
       content: contentString
    });
    var newMarker = new google.maps.Marker({
       position: new google.maps.LatLng(events[i][1], events[i][2]),
       map: map,
       title: events[i][0]
     });
     newMarker.categorysassasas = 2;
     newMarker.category = events[i][3];
     markers.push(newMarker);
     google.maps.event.addListener(newMarker, 'click', function() {
        infowindow.open(map,newMarker);
     });
}
4

1 に答える 1

-1

このスタックオーバーフローで質問に対する同様の解決策を見つけました:複数の InfoWindows を Google マップ上の複数のマーカーにバインドしようとして失敗する

基本的に、addlistener 関数を別の関数内にラップして、マーカー変数のクロージャーを作成するだけで、情報ウィンドウにバインドされます。あなたの場合、init() の外側に listenMarker 関数を追加し、マーカーと情報ウィンドウの変数を渡す必要があると思います..

function listenMarker (marker, info)
{
  // so marker is associated with the closure created for the listenMarker function call
  google.maps.event.addListener(marker, 'click', function() {
    info.open(map, marker);
  });
}

次に、addlistener イベントを呼び出す for ループで、次のように置き換えます。

listenMarker(newMarker, infowindow);

これでうまくいくはずです。

于 2012-05-25T15:07:11.767 に答える