Динамическое добавление прослушивателей к маркерам Google Maps

StackOverflow https://stackoverflow.com/questions/1220063

Вопрос

Я работаю над страницей, которая извлекает код с помощью 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)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top