Динамическое добавление прослушивателей к маркерам Google Maps
-
10-07-2019 - |
Вопрос
Я работаю над страницей, которая извлекает код с помощью httpObject Javascript и использует его для обновления двух элементов на странице - карты Google и DIV, в котором перечислены объекты, на которые указывает маркер.
Этот бит работает нормально.Проблема в том, что когда я создаю маркеры, я делаю это через цикл for и добавляю прослушиватели к маркеру в каждом цикле.Затем, когда я тестирую страницу, я обнаруживаю, что то же самое происходит с каждым маркером.
При наведении курсора на маркер должен измениться цвет границы соответствующего бита DIV.Вместо этого каждый маркер меняет границу последнего бита.Кажется, что каждый раз, когда я добавляю слушателей, я также перезаписываю слушателей ранее добавленных маркеров.
Я понимаю, что это связано с тем, что API Google Maps сохраняет идентичность маркера, даже когда вы создаете новый в Javascript.Чего я не понимаю, как это обойти - я попробовал создать массив вне цикла и изменить
var newMarker = new GMarker(newLatLng);
с Newmarker [count] = new Gmarker (newlatlng);
но это все еще не работает.
Помогите мне, StackOverflow.Ты моя единственная надежда.:)
Редактировать:Еще немного кода
for (count=0;count<=LatArray.length;count++)
{
thisLat = LatArray[count];
thisLong = LongArray[count];
thisHTML = HTMLArray[count];
newLatLng = new GLatLng(thisLat, thisLong, true);
if (mapBounds.containsLatLng(newLatLng))
{
//alert(count);
var dinnerNumber = "dinner_"+count;
newMarkers[count] = new GMarker(newLatLng);
map.addOverlay(newMarkers[count]);
GEvent.addListener(newMarkers[count],'mouseover',function(){document.getElementById(dinnerNumber).style.borderColor = '#000000';
});
}// for
Решение
Проблема закрытия: все эти слушатели используют одну и ту же переменную DinnerNumber.Попробуй это:
GEvent.addListener(newMarkers[count], 'mouseover', (function(dinnerNumber){ return function(){document.getElementById(dinnerNumber).style.borderColor = '#000000';}; })(dinnerNumber));
Таким образом, каждый слушатель создается со своей закрытой копией ужина.
Другие советы
Вам нужно внимательно прочитать
GEvent.addListener(newMarkers[count], 'mouseover',
(function(dinnerNumber)
{ return function()
{ document.getElementById(dinnerNumber).style.borderColor = '#000000';};
}
)(dinnerNumber)
);
вы пропустили один ();
третий параметр: (function(var){return function(){//то, что вы хотите с var;};})(var)