Вопрос

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

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); 
}
Это было полезно?

Решение

Да, вы определяете 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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top