音楽会場とイベントのデータベース用に Maps インターフェースを実装していて、興味深い問題に遭遇しました。特定の Javascript 関数への onclick 呼び出しを含む一連の HTML 要素があります。呼び出しが正しく実行され、javascript 関数が最初に正しく実行され (すべての情報が正しく渡され、デバッグ アラートが正しく表示されます)、infoWindow が表示されます。これらの div の 1 つを 2 回目にクリックすると、最初の div は正しく閉じられます。以下のコードの最後のアラートは正しい情報で発生しますが、新しい InfoWindow はポップアップしません。
マップ設定コード:
function mapsInitialize() {
var mapOptions = {
center: new google.maps.LatLng(42.4439614, -76.5018807),
zoom: 14,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("mapSection"), mapOptions);
google.maps.event.trigger(map, 'resize');
for(var x = 0; x < markers.length; x++){
var tempOptions = {
position: markers[x].position,
title: markers[x].name,
map: map
}
markerObjects[markers[x].title] = new google.maps.Marker(tempOptions);
}
}
div から onclick と呼ばれる関数:
function generateInfoWindow(despacedName, despacedTitle, eventTitle, url, date, time){
if(curInfoWindow){
alert("closing " + curInfoWindow.getContent());
curInfoWindow.close();
curInfoWindow = null;
}
curInfoWindow = new google.maps.InfoWindow(options = {size: new google.maps.Size(150,50)});
curInfoWindow.setContent("<a class=\"eventLink\" href=\""+url+"\">"+eventTitle+"</a><br><br>"+markerObjects[despacedName].title+"<br>"+date+" at "+time);
curInfoWindow.open(map, markerObjects[despacedName]);
alert(despacedName+" is "+markerObjects[despacedName]);
}
マーカー[]配列が正しく供給されることを保証できます。
色々と試してみた...
1 つの curInfoWindow 変数を使用する代わりに、infoWindows を保持する配列を作成する
generateInfoWindow() 関数の先頭のように、配列に何も自動的に閉じない
mapsInitialize() 関数で情報ウィンドウを自動的に作成する
解決策を検索したときの Google での結果のほとんどは、マップ上のイベント リスナーに関する情報をもたらしてくれました。
他のコード例が必要な場合は、お知らせください。ご提案ありがとうございます。