2010-01-11 3 views
1

Я не могу закрыть информационное окно маркера, я перетаскиваю любую идею? Спасибо за вашу помощьInfoWindow не хочет закрываться с Google Maps Api V3

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); 
} 

ответ

3

Да, вы определяете в частных сферах infowindow, но доступ к нему за пределами этой сферы. Добавьте это к началу вашего сценария:

var infowindow; 

И удалить «вара» из конструктора строки:

infowindow = new google.maps.InfoWindow(

Законченного код (от вашего образца) будет look like this.

Побольше фон

При определении переменной с 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 
} 
+0

Rapide, clair et précis! Merci beaucoup Doug :) – Shipow

+0

@Shipow Avec plaisir <- Я уверен, что это означает «мое удовольствие», если нет, вы можете смеяться, так как я говорю только по-английски! –

+0

«Единственный способ передать это как параметр в функции». Я хочу иметь более одного маркера, поэтому существует несколько заданных значений, где я должен использовать параметр для доступа к экземпляру? thx для вашего времени – Shipow

Смежные вопросы