Я разрешаю пользователям перезагружать/повторно размещать карту. Я разместил об этом здесь.
Я добавил код, который должен работать, чтобы перезагрузить маркеры, на основе которых они были выбраны.
Чтобы дать вам представление о том, что я говорю, вот скриншот о том, как выглядит сайт при его первом отображении:
Если я выберу другое представление из раскрывающегося списка (любое состояние или США 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
});
}
Существует метод ReloadMarkers(), который вызывается в конце события select:
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()
});
Как будто проверенное состояние флажков не распознается...
Потому что в вашей функции 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