我允许用户重置/重新定位地图。我发布了here.
我根据他们选择的复选框添加了应该重新加载标记的代码。
为了让您知道我在说什么,这里是一个屏幕截图,显示该网站首次显示时的外观:
如果我从下拉列表中选择不同的视图(任何州或美国50+),我可以选择一个复选框或复选框,它/它们将起作用,但我的代码应根据哪个复选框重绘标记已被点击的人没有。
以下是从下拉列表中选择项目时重新定位地图的代码:
$('#stateSelector').on("change",function() {
var $this = $(this).val();
if ($this == "USA (48)")
{
LoadUSA48();
}
else if ($this == "USA (50+)")
{
LoadUSA50();
}
else if ($this == "Alabama")
{
LoadAlabama();
}
. . .
else if ($this == "Wyoming")
{
LoadWyoming();
}
});
以下是Load()方法的示例:
function LoadAlabama() {
$("#map").removeData();
$("#map").goMap({
latitude: 32.806673,
longitude: -86.791133,
zoom: 8
});
}
在select事件结束时调用了一个ReloadMarkers()方法:
function ReloadMarkers() {
if ($('#NFLCheckbox').is(':checked')) {
ShowNFLMarkers();
}
. . .
if ($('#AmMusiciansCheckbox').is(':checked')) {
ShowMusiciansMarkers();
}
}
ShowX()方法包含以下所有类型的代码:
$.goMap.createMarker({
address: 'Green Bay, Wisconsin',
title: 'Green Bay Packers',
group: 'NFLGroup',
icon: constants.nflIcon,
html: getPackers()
});
就好像没有识别复选框的选中状态......
答案 0 :(得分:1)
因为在你的LoadAlabama()函数中,地图正在重新初始化。标记与旧地图对象相关联。从下拉列表中更改选项时,新地图对象没有与之关联的任何标记。因此showHide不起作用(因为地图上还没有标记)。
最好的解决方案是将地点的lat-long值存储在一个对象或数组中,我猜你已经在做了。当您重新初始化地图时,您需要迭代标记并为需要显示的标记设置地图。像这样的东西
function setMapForMarkers (mapMarkers) {
$(mapMarkers).each(function(i, elm) {
elm.setMap(myMap);
});
}
function ReloadMarkers() {
if ($('#NFLCheckbox').is(':checked')) {
setMapForMarkers(NFLGroupMarkers); //NFL Group markers should be an array containing the markers that need to be displayed.
} else {
//whatever set of markers you want to display here
}
}
您可以参考此作为工作示例 https://developers.google.com/maps/documentation/javascript/examples/marker-remove