Google Maps v3 setMap не определено при попытке очистить все маркеры - PullRequest
4 голосов
/ 09 ноября 2010

Я видел, как люди здесь могут объяснить эту функцию:

// REMOVE All MARKERS FUNCTION
    // Removes all markers currently on map
    // PARAMS: None
    function removeAllMarkers(){// removes all markers from map
        if (markersArray) {
            for (i in markersArray) {
                markersArray[i].setMap(null);
                markersArray = [];
                markersInfoArray = [];
            };
        };
    };

, но я получаю ошибку javascript ...

Сбой при ошибке markersArray [i] .setMap не является функцией

Страница находится по адресу: http://www.focus -on-plants.com / locator.php

любые идеи ???

<-------------- Обновление --------------------->

Я попробовал sugestions, а также переместилMarkersArray=[] и markersInfoArray = [] к внешней стороне цикла for, поэтому у меня было следующее:

for( var i = 0; i < markersArray.length; i++ ){
    markersArray[i].setMap(null);
}

Но я получаю то же самое error markersArray[i].setMap is not a function

, поэтому я оглянулся и попробовал этот метод:

function removeAllMarkers(){// removes all markers from map
    alert('REMOVE MARKERS - markersArray count:'+ markersArray.length);
    while(markersArray[0]){
        markersArray.pop().setMap(null);
        markersInfoArray.pop()
    }
    markersArray.length = 0;
    markersInfoArray.length = 0;
};

и я все еще получаю ту же ошибку, что дает?почти как если бы setMap () не существовало, я прочитал в другом потоке здесь , что он меняется с set_map на setMap (), но у меня они тоже не работают: (

Ответы [ 4 ]

12 голосов
/ 28 февраля 2011

У меня была такая же проблема, как и у вас. Но изменив цикл for-in на фактический цикл (как предложено здесь , исправили его.

При удалении маркера не нужно было создавать новый google.maps.marker.

Пример кода:

<code>
var markersArray = [];</p>

<p>function addMarker() {
    var marker = new google.maps.Marker({
      position: latlng, 
      map: map 
    });
    markersArray.push(marker);
}</p>

<p>function removeMarker() {
    if (markersArray) {
        for (i=0; i < markersArray.length; i++) {
            markersArray[i].setMap(null);
        }
    markersArray.length = 0;
    }
}
2 голосов
/ 09 ноября 2010

Он ломается, потому что вы сбрасываете массив внутри цикла.Это может быть намного лучше:

function removeAllMarkers(){
    if (markersArray) {
        for (i in markersArray) {
            markersArray[i].setMap(null);
        }

        markersArray = [];
        markersInfoArray = [];
    }
}

Кстати, вам не нужно использовать ; все время;)

2 голосов
/ 09 ноября 2010

Попробуйте реальный цикл.for (i in markersArray) также получит свойства.Это не то же самое, что, скажем, PHP foreach.

for( var i = 0; i < markersArray.length; i++ ) {}
0 голосов
/ 10 ноября 2010

хорошо, так что я получил его на работу, решение вроде уродливое, но оно работает,

Я подумал, что он не нашел бит пространства имен google.maps по сохраненным маркерам в моем массиве, поэтому он решил, что функция не существует.

есть. это должно быть google.maps.marker.setMap() маркер в массиве просто выводил lat и lng.

поэтому в функции removeAllMarkers я создаю новый google.maps.marker delmarker заполните его данными из маркера, хранящимися в markersArray а затем удалите маркер карты, используя эту новую ссылку delmarker.setMap(null)

и бинго это работает, но затянулось и заняло у меня некоторое время, чтобы выяснить:)

function removeAllMarkers(){// removes all markers from map
    for( var i = 0; i < markersArray.length; i++ ){
    delmarker = new google.maps.Marker({
        position: markersArray[i]
    })
    delmarker.setMap(null)
    }   
    markersArray.length = 0;
    markersInfoArray.length = 0;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...