嗯,我明白了posMarker
用作放置 Google 地图标记的临时变量,并且随着 for 循环的进行,posMarker
引用“更新”到最新放置的标记。这就是为什么只显示最后一个标记的原因。
您需要跟踪所有对所放置的 Google 地图标记的引用,包括那些已被“消耗”的标记。我的方法使用一个对象,很像你的markers
对象,但保留对 Google 地图标记的引用。您还可以使用普通索引数组 (posMarkers[])。由你决定。
See the Demo http://jsfiddle.net/yV6xv/94/,请注意,为简单起见,LatLngs 已被修改(看起来您有一个自定义坐标系)。
另外,我没有进行此更改,但我只是注意到致电可能更有意义marker
in markers
, city
in markers
因为你的对象的编写方式。它会更具可读性,但不会影响执行。
最后,最后的分号for 循环 https://developer.mozilla.org/en/JavaScript/Reference/Statements/for块是不需要的,并且要小心后面的逗号Paris
对象(我猜你刚刚删除了列表的其余部分)。在这种情况下,这并不重要,但其他时候,这些尾随逗号可能是难以发现的错误的来源。
function initialize() {
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var markers = {
"London": { "lat": 0, "lng": 0, "type": "town", "visible": false },
"Paris": { "lat": 10, "lng": 10, "type": "town", "visible": false }
};
var posMarkers = {};
for (var marker in markers) {
posMarkers[marker] = new google.maps.Marker({
position: new google.maps.LatLng(markers[marker].lat, markers[marker].lng),
map: map,
visible: markers[marker].visible
});
}
$('#toggle').change(function () {
for (var marker in markers) {
if (posMarkers[marker].getVisible()) {
posMarkers[marker].setVisible(false);
}
else {
posMarkers[marker].setVisible(true);
}
}
});
}