2011-06-22 20 views
1

Googleマップのapi v.3で新しい情報が開かれている場合は、infowindowを閉じることに問題があります。infowindow closing and var(google maps api v3)

var infowindow; 
function addMarker(id, location) { 
contentString = 'some content'; 

var marker = new google.maps.Marker({ 
    position: location, 
    map: map 
}); 

var infowindow = new google.maps.InfoWindow({ 
    content: contentString, 
    maxWidth: 200 
}); 

google.maps.event.addListener(marker, 'click', function() { 
    if (infowindow) infowindow.close(); 
    infowindow.open(map, marker); 
}); 

markersArray[id] = marker; 
} 

問題は、私はラインするvar情報ウィンドウ=新しいgoogle.maps.InfoWindowからVARを削除しない限り、新たな1つがクリックされた場合、上記のコードでは、古い情報ウィンドウを閉じていないことである({ しかし、その後、新しいものを開くときに、すべての情報ウィンドウが同じコンテンツを持っている...

任意のヘルプ? ありがとう。

+0

あなたは同じスコープ内で同じ名前の2つの変数を宣言していますか? –

+0

はい、その真です。私は2回の情報ウィンドウを持っています。しかし、私は_var infowindowを削除します。 _は本当に何かを変えません... – gordonek

答えて

2

最後に開かれたマーカーへのポインタを格納するグローバル変数を使用し、かつ、前回のOを閉じますne。このように

//var infowindow; // <-- removed; should not be global 
var openedInfoWindow = null; // <-- added this here; make sure it's global 

function addMarker(id, location) { 
    contentString = 'some content'; 

    var marker = new google.maps.Marker({ 
     position: location, 
     map: map 
    }); 

    var infowindow = new google.maps.InfoWindow({ 
     content: contentString, 
     maxWidth: 200 
    }); 

    google.maps.event.addListener(marker, 'click', function() { 
     if (openedInfoWindow != null) openedInfoWindow.close(); // <-- changed this 
     infowindow.open(map, marker); 
     // added next 4 lines 
     openedInfoWindow = infowindow; 
     google.maps.event.addListener(infowindow, 'closeclick', function() { 
      openedInfoWindow = null; 
     }); 
    }); 

    markersArray[id] = marker; 
} 
+0

それは動作します!どうもありがとうございます。私はそれを解決しようと多くの時間を費やしています。 – gordonek

+0

これは私が書いたコードとどのように違うのか分かりませんが、これはうまくいきました。 –