という辞書に Google Maps API マーカーのリストがありますmarkerList
。それらはすべてマップ上に配置されています。次に、すべての の配列を作成しますinfowindow
。次にaddListener
、マーカーがマップ上でクリックされたときinfowindow.open
に、正しいマップと情報ウィンドウが呼び出されるように、それぞれについて行う必要があります。
残念ながら、マーカーをクリックすると、firebug コンソールに次のエラーが表示されます。
infowindow is not defined
infowindow.open(map,infowindowList[window]);
これが私のコードです:
var infowindowList = {};
for (var aMarker in markerList){
infowindowList[aMarker] = new google.maps.InfoWindow({
content: "This is a test!",
size: new google.maps.Size(50,50)
});
console.log(infowindowList[aMarker]);
}
console.log("Done creating infowindowList...\n...Adding listeners");
for (var window in infowindowList){
google.maps.event.addListener(markerList[window], 'click', function() {
// infowindow.open(map,infowindowList[window]); // wrong, see Edit
infowindowList[window].open(map,markerList[window]);
});
console.log("added listener for window: ", infowindowList[window]);
}
これが起こっているのは、google.maps.event.addListener(markerList[window]...
関数でクリック時に実行される関数を として登録しているためだと思いinfowindow.open(map,infowindowList[window])
ますが、その値window
は関数に対してローカルであるため、マーカーをクリックすると、その関数は機能しません。何があるかわかりませんwindow
。あれは正しいですか?
編集: geocodezip が指摘したように、infowindow
存在しません。だから私はそれを にinfowindowList[window].open(map,markerList[window]);
変更し、最後の引数もに変更しましmarkerlist[window]
た。これは、別の情報ウィンドウではなく、引数としてのマーカーである必要があるためです。