InfoWindow не хочет закрываться с Google Maps Api V3 - PullRequest
1 голос
/ 11 января 2010

Я не могу закрыть информационное окно маркера, который я перетаскиваю, любая идея? Спасибо за вашу помощь

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);
    displayMarkerPosition(gMarker);

     google.maps.event.addListener(gMarker, "dragstart", closeMapInfoWindow );
     google.maps.event.addListener(gMarker, "dragend", function() { displayMarkerPosition(gMarker); });
}

function closeMapInfoWindow() {infowindow.close(); }

function displayMarkerPosition(gMarker) {
    var message = "my message";
    var infowindow = new google.maps.InfoWindow(
    {   content : message,
    });

    infowindow.open(gMap2,gMarker); 
}

1 Ответ

3 голосов
/ 11 января 2010

Да, вы определяете 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...