2011-02-24 21 views
0

現在、Googleマップのマーカーを作成するには、これを実行しています。ループのために、マーカーを閉じるために、私はこれに似た何かを知っていると他の情報ウィンドウを閉じる

function createMarker(posn, title, html) { 
      var marker = new google.maps.Marker({ position: posn, title: title, draggable: false }); 
      marker['infowindow'] = new google.maps.InfoWindow({ content: html }); 

      infoWindows.push(marker['infowindow']); 
      google.maps.event.addListener(marker, "click", function() { 
       for (i = 0; i < infoWindows.length; i++) { 
        infoWindows[i].close(); 
       } 
       this['infowindow'].open(map, this); 
      }); 
      return marker; 
     } 

イム幸せではないが1 refernce使用して行うことができます。

場合(情報ウィンドウ)infowindow.close()を。

私が上記のようなコードを使用している理由は、
markers[myPoint]['infowindow'].open(map, markers[myPoint]); else、(myPointは数字です)のようなものです。

どのようにしてオープンインフォウィンドウを閉じるためのこのループを避けていいですか?

答えて

2

ただ、最後の保存グローバル変数に情報ウィンドウを開く:

var activeInfoWindow; 

function createMarker(posn, title, html) { 
    var marker = new google.maps.Marker({ position: posn, title: title, draggable: false }); 
    marker['infowindow'] = new google.maps.InfoWindow({ content: html }); 

    infoWindows.push(marker['infowindow']); 
    google.maps.event.addListener(marker, "click", function() { 
     if (activeInfoWindow == this['infowindow']) { 
      return; 
     } 
     if (activeInfoWindow) { 
      activeInfoWindow.close(); 
     } 

     this['infowindow'].open(map, this); 
     activeInfoWindow = this['infowindow']; 
    }); 
    return marker; 
} 
+0

はバグがあります。それは再び情報ウィンドウを表示しません。 これを修正するには、 を削除します。if(activeInfoWindow == this ['infowindow'] { return;} – nguyencse

2

それが唯一の情報ウィンドウをしていると、マーカーをクリックしてイベントにあなたが情報ウィンドウののsetContentプロパティとその後、オープンイベントを呼び出すことのもう一つの方法マップとマーカーをパラメータとして使用します。

マップ上に10,000以上のマーカーがある私のアプリケーションでは、この方法が優れています。

参照:再びそのマーカー上にクリックし、それの情報ウィンドウの閉じるボタンをクリックし、マーカー上にクリックしたときにhttp://code.google.com/apis/maps/documentation/javascript/reference.html#InfoWindow

infoWindow = new google.maps.InfoWindow(); 

function createMarker(posn, title, html) { 
    var marker = new google.maps.Marker({ position: posn, title: title, draggable: false }); 
    marker['content'] = html; 
    google.maps.event.addListener(marker, "click", function() { 
     infoWindow.setContent(this['content']); 
     infoWindow.open(map, this); 
    }); 
    return marker; 
} 
関連する問題