Вот демоверсия JSFiddle , которая похожа на карту Google вашего сайта, но вместо этого с ajax я просто поместил 3 "фиктивные" координаты Lat Lng. Дайте мне знать, если вам нужна дополнительная помощь с объяснением:
Причина в вашей функции обратного вызова. В вашей функции initializeTrailheads()
вы создали локальную переменную с именем marker
и прикрепили к ней событие нажатия. Затем вы присвоили маркеру информационное окно, которое делает infowindow.open(map, marker);
google.map.event.addListener
с функцией обратного вызова, которая находится в другой области действия после щелчка. Таким образом, он в основном захватывает переменную marker
области видимости своего родителя, потому что он не имеет ее внутри себя. Обычно, когда не происходит событие щелчка, маркер становится последним инициализированным маркером (который является последним), и в основном привязывается к информационному окну, которое не связывается с какими-либо другими маркерами до него и, таким образом вызвать вашу проблему. Вам нужно просто заменить переменную marker
на this
, которая ссылается на маркер, по которому щелкают, и который должен решить вашу проблему:
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map, this);
});
Это только с моей головы. Пожалуйста, дайте мне знать, если я не объяснил это ясно в некоторых частях.