Да, вы определяете infowindow
в частной области, но обращаетесь к ней за пределами этой области. Добавьте это в начало вашего скрипта:
var infowindow;
И удалите 'var' из вашей строки конструктора:
infowindow = new google.maps.InfoWindow(
Готовый код (из вашего примера) будет выглядеть так: .
Еще немного фона
Когда вы определяете переменную с помощью var
, она привязывается к этой области. Если вы определили его в функции, только эта функция и другие функции, определенные в ней, могут получить доступ к переменной. Единственный способ передать его - это параметр в функции.
Обновление Я хотел бы сделать это, чтобы упростить несколько информационных окон. Заметьте, что я вернулся к исходному объявлению var
, чтобы оставить его для этой функции. Затем я возвращаю ссылку на объект, чтобы использовать его позже:
function mapClick(event) {
createLocationMarker(event.latLng);
}
function createLocationMarker(location) {
var clickedLocation = new google.maps.LatLng(location)
var gMarker = new google.maps.Marker({position:location, map:gMap2, draggable: true});
gMap2.setCenter(location);
// Store reference to info window
var info = displayMarkerPosition(gMarker);
google.maps.event.addListener(gMarker, "dragstart", function(){ info.close } );
google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); });
}
function displayMarkerPosition(gMarker) {
var message = "my message";
var infowindow = new google.maps.InfoWindow(
{ content : message }
);
infowindow.open(gMap2,gMarker);
return infowindow; // Return the reference to the infowindow
}