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