尝试清除所有标记时,谷歌地图v3 setMap未定义

时间:2010-11-09 18:48:51

标签: jquery arrays google-maps-api-3

我看到有人可以在这里解释这个功能:

// 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()不存在一样,我在另一个线程here中读到它从set_map变为setMap()但是那些对我来说也不起作用:(

4 个答案:

答案 0 :(得分:12)

我和你有同样的问题。但是将for-in循环更改为实际循环(如建议的here,修复它。

删除标记时无需创建新的google.maps.marker。

示例代码:


var markersArray = [];

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

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

答案 1 :(得分:2)

尝试实际循环。 for (i in markersArray)也会检索属性。这与PHP的foreach不一样。

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

答案 2 :(得分:2)

它因为重置循环内的数组而中断。这可能会好很多:

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

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

顺便说一句,您不需要使用; 所有时间;)

答案 3 :(得分:0)

好的,所以我得到它的工作,解决方案有点难看,但它的工作,

我认为它没有从我的数组中存储的标记中找到google.maps命名空间位,这就是为什么它认为该函数不存在。

即。它应该是google.maps.marker.setMap()数组中的标记只是输出lat和lng。

所以在removeAllMarkers函数中我创建了一个新的google.maps.marker delmarker 使用markersArray中存储的标记数据填充它 然后使用此新引用delmarker.setMap(null)

删除地图标记

和bingo它有效,但是长途跋涉并花了一些时间才弄明白:)

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