javax
@javax
Software Architect, Java Developer since 1996

Javascript: контекст выполнения функции

Делаю цикл, чтобы на маркеры гугловских карт повесить листенеры показа InfoWindow

 for (var i = 0; i < points.length; i++) {


	    var point = points[i];
	    var myLatLng = new google.maps.LatLng(point.lat, point.lng);
	    var marker = new google.maps.Marker({
	        position: myLatLng,
	        map: map,
	        icon: point.icon,
	        title: point.name,
	        visible:false
	    });
        google.maps.event.addListener(marker, 'click', function() {
              infowindow.setContent(point.description);
              infowindow.setPosition(myLatLng);
              infowindow.open(map);
        });

	    point.marker = marker;
	  }




В результате при клике на маркер он показывается всегда для последней точки.
Т.е. такое ощущение, что функция создается не в своём контексте (как я привык в Яве), а используется последнее значение point из цикла.

Как это работает в JavaScript? Что делать чтобы листенер для каждого маркера показывал InfoWindow в правильном месте?

Спасибо
  • Вопрос задан
  • 4053 просмотра
Пригласить эксперта
Ответы на вопрос 3
marcus
@marcus
У вас замыкание в point. Нужно вынести добавление листенера в отдельную функцию с одним аргументом, которую вызывать в цикле и передавать туда pointer.
Ответ написан
Methos
@Methos
Нужно внутри цикла всё поместить внутрь функции и вызывать её:

(function() {
//…
})();

Тогда для каждого элемента цикла будет своё собственное окружение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект