0

複数のマーカーにリンクを張るのに問題がありますが、地図上にマーカーを表示できますが、リンクを張ってみると、すべてのマーカー上の同じリンク、最後のマーカー。ここで私はサンプルコードを提供します:Javascript Google Maps Api、リンク付きの複数のマーカー、ジオシェダーのみ

<div id="map" style="height: 400px; width:100%;"></div> 
    <script> 
    var markers = [{"name":"Vasto","url":"http://www.google.com"},{"name":"Chieti","url":"http://www.wikipedia.com"}]; 
    var geocoder; 
    var map; 
    var LatLng; 
    var url; 
    console.log(markers); 

    function initMap() { 
     LatLng = {lat: 42.2872297, lng: 13.3403448}; 
     map = new google.maps.Map(document.getElementById('map'), {zoom: 8, center: LatLng}); 
     geocoder = new google.maps.Geocoder(); 
     setMarkers(); 
    } 

    function setMarkers() { 
     var marker, i, url; 
     for(i = 0; i < markers.length; i++) { 
      url = markers[i].url; 
      geocoder.geocode({'address': markers[i].name}, function(results, status) { 
      if (status === 'OK') { 
       marker = new google.maps.Marker({ 
        map: map, 
        position: results[0].geometry.location, 
        title: results[0].address_components[0].long_name, 
       }); 
       google.maps.event.addListener(marker, "click", function() { 
        window.location.href = url; 
       }); 
      } else { 
      /*console.log('Geocode was not successful for the following reason: ' + status);*/ 
      }}); 
     } 
    } 
    </script> 
    <script src="https://maps.googleapis.com/maps/api/js?key=MYKEY&callback=initMap" async defer></script> 

すべての解決策はありますか? により非同期コードへの事前

+1

非同期関数(geocoder.geocode)を変更する必要があるが...ときに我々が今まで学ぶことができます - 私はよ適切な複製を探していますが、私が酔っていたので見つからないようです。 –

+0

はい、私はジオコーダが必要です。なぜなら、latlngデータを保存できないからです。 –

+1

代替手段は必要ありません。問題は非同期コードです... geocoder.geocodeコールバックのコードが呼び出されるまでに、 'url'の値は** marker ** [marker]になります。長さ - 1] .url' –

答えて

0

のおかげで、あなたはループの中にあなたのコードビット

function setMarkers() { 
    markers.forEach(function(item) { 
     var url = item.url; 
     geocoder.geocode({'address': item.name}, function(results, status) { 
     if (status === 'OK') { 

      var marker = new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location, 
       title: results[0].address_components[0].long_name, 
      }); 
      google.maps.event.addListener(marker, "click", function() { 
       window.location.href = url; 
      }); 
     } else { 
     /*console.log('Geocode was not successful for the following reason: ' + status);*/ 
     }}); 
    } 
} 
+0

okありがとう:) –

+0

私はそれが動作することを願って、私はそれが –

+0

それを書いたときに絶対にうんざりしていた、それは再びありがとう:) –

関連する問題