Google Maps Api - Изтриване на маркер с щракване с мишката

Имам проблем с изтриването на маркер при щракване с мишката. Е, работата не е толкова проста, колкото изглежда.

function addPoint(event) {
path.insertAt(path.length, event.latLng);

var marker = new google.maps.Marker({
  position: event.latLng,
  map: map
});
markers.push(marker);
google.maps.event.addListener(marker, 'click', function() {
  marker.setMap(null);
  markers.splice(i, 1);
  }
);

Ако използвах този код, добавяйки слушател веднага при създаването на маркер, изтриването му би било лесно, защото се позовавам на marker.setMap(null);. Но в моя случай искам те да бъдат създадени и след това искам да добавя слушателя на събития към тях, използвайки

function usun(){
for (var i=0; i<markersArray.length; i++){
    google.maps.event.addListener(marker, 'click', function() {
        alert('lol');
    });
}

Натискам всеки маркер до markersArray, което ми позволява да добавя събитие към всеки от него сега, но как мога да го изтрия? Когато поставя marker.setMap(null); на мястото на предупреждението, той казва, че маркерът не е дефиниран и не знам как мога да се позова на маркера, който току-що щракнах :S също не мога да използвам маркера като глобална променлива, защото получавам грешка Uncaught TypeError: Cannot read property '__e3_' of undefined.

РЕДАКТИРАНЕ: ако се опитам да използвам

function usun(){
for (var i=0; i<markersArray.length; i++){
    google.maps.event.addListener(markersArray[i], 'click', function() {
        markersArray[i].setMap(null);
    });
}

} получавам грешката Uncaught TypeError: Cannot call method 'setMap' of undefined. Ето защо бях сигурен, че трябва да използвам "маркер".


person Kedor    schedule 21.09.2011    source източник
comment
Това е класическо затваряне на проблема в цикъл. Това е същият проблем като тук: stackoverflow.com/questions/8325736/   -  person Tomas    schedule 30.11.2011


Отговори (1)


Във вашия for цикъл вие не се позовавате на маркера, който е в масива.

Опитайте тази:

function usun(){
for (var i=0; i < markersArray.length; i++){

    google.maps.event.addListener(markersArray[i], 'click', function() {
        this.setMap(null);
    });

}

работещ пример: http://jsfiddle.net/52nJc/1/

person Bryan Weaver    schedule 21.09.2011
comment
Добавена редакция в основната публикация. Получавам грешката Uncaught TypeError: Cannot call method 'setMap' of undefined, когато се опитам да го използвам. - person Kedor; 21.09.2011
comment
упс, съжалявам, това беше грешката ми при лошо копиране и поставяне. използвайте this вътре в слушателя. Ще редактирам публикацията. - person Bryan Weaver; 21.09.2011
comment
‹3 благодаря, приемам отговора, ако това означава нещо за вас :) - person Kedor; 21.09.2011
comment
Благодаря ти много - person Osama khodrog; 11.03.2021