我看到有人可以在这里解释这个功能:
// 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()但是那些对我来说也不起作用:(
答案 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;
};