GoogleMaps po kliknięciu markera zawsze pokazuje info dla ostatniego dodanego markera

0

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/

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/

1 użytkowników online, w tym zalogowanych: 0, gości: 1