1

という辞書に 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]た。これは、別の情報ウィンドウではなく、引数としてのマーカーである必要があるためです。

4

1 に答える 1

2

infowindow 変数が定義されていないため、「infowindow is not defined」というエラーが表示されます。あなたが投稿したコードでは確かに定義されていません。

通常はグローバルに定義されるため、1 つの情報ウィンドウ (v2 の既定の動作) がありますが、その場合でも (通常は onload 関数で) 定義して作成する必要があります。

実施例

于 2012-07-02T22:54:50.393 に答える