Praktycznie żywcem zerżnięty kod z googla https://developers.google.com/maps/documentation/javascript/mysql-to-maps ze zmianą, że dane zamiast z xmla pobierane są ze zmiennej. W przykładzie googla po kliknięciu na marker pokazuje się okienko danego markera, u mnie zawsze pokazuje się okienko dla ostatniego marker. Niedziałający kod https://jsfiddle.net/6g0r5k1q/
0
1
Coś z hoistingiem masz nie połapane, nie wiem co bo nie analizowałem, zamieniłem wszystkie vary na let i działa.
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
center: new google.maps.LatLng(-33.863276, 151.207977),
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var infoWindow = new google.maps.InfoWindow;
for (let i = 0; i < contractors.length; i++) {
let contractor = contractors[i];
let marker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(
parseFloat(contractor['lat']),
parseFloat(contractor['lng'])),
label: contractor['id'],
title: contractor['name']
});
let strong = document.createElement('strong');
strong.textContent = contractor['name']
let text = document.createElement('text');
text.textContent = contractor['address']
let infowincontent = document.createElement('div');
infowincontent.appendChild(strong);
infowincontent.appendChild(document.createElement('br'));
infowincontent.appendChild(text);
marker.addListener('click', function() {
infoWindow.setContent(infowincontent);
infoWindow.open(map, marker);
});
};
0
ja pier**** w życiu bym nie doszedł do tego...
1
Konkretnie var marker
-> let marker
(a jeszcze lepiej by było dać tam i w innych miejscach const
) pomogło.
Dlaczego? Gdy używasz var
scope jest ustawiany per funkcja, więc za kazdą iteracją nadpisujesz tą zmienną.
ja pier**** w życiu bym nie doszedł do tego...
Doszedłbyś, gdybyś tylko używał lintera, lub chociażby wkleił kod tutaj: http://jshint.com/