2017-02-21 179 views
-1
var cityMap = new google.maps.Map(document.getElementById('cityMap'), { 
    zoom: 12, 
}); 
var infowindow = new google.maps.InfoWindow(); 
var services = document.getElementsByClassName('s__item'); 
var marker; 
var geocoderCity = new google.maps.Geocoder(); 

for (i=0; i < services.length; i++) { 
    var address = $(services[i]).find('.s__item__address_at').text(); 
    var contentString = address; 

    geocoderCity.geocode({'address': address}, function (results, status) { 
    if (status === google.maps.GeocoderStatus.OK) { 
     center = results[0].geometry.location; 
     cityMap.setCenter(results[0].geometry.location); 

     marker = new google.maps.Marker({ 
      map: cityMap, 
      position: center,     
     }); 

     google.maps.event.addListener(marker, 'click', (function(marker) { 
      return function() { 
       infowindow.setContent(contentString); 
       infowindow.open(cityMap, marker); 
      } 
     })(marker)); 
    } 
}); 
} 

s__item__address_at块中有一个地址。我使用地理编码器获取位置。然后我尝试在地图上添加infowindows,但是我只获得迭代的最后结果。我该如何解决它?谷歌地图api。多个标记

jsfiddle

回答

0

你可以使用一个clousure为使现有的VAR实例听者

function markerListener(aMap, aMarker, aContent){ 
      google.maps.event.addListener(marker, 'click', (function(marker) { 
       return function() { 
       infowindow.setContent(aContent); 
       infowindow.open(aMap, aMarker); 
       } 
      }); 
    } 

    var cityMap = new google.maps.Map(document.getElementById('cityMap'), { 
    zoom: 12, 
    }); 
    var infowindow = new google.maps.InfoWindow(); 
    var services = document.getElementsByClassName('s__item'); 
    var marker; 
    var geocoderCity = new google.maps.Geocoder(); 



    for (i=0; i < services.length; i++) { 
     var address = $(services[i]).find('.s__item__address_at').text(); 
     var contentString = address; 

     geocoderCity.geocode({'address': address}, function (results, status) { 
     if (status === google.maps.GeocoderStatus.OK) { 
      center = results[0].geometry.location; 
      cityMap.setCenter(results[0].geometry.location); 

      marker = new google.maps.Marker({ 
       map: cityMap, 
       position: center,     
      }); 

      markerListener(cityMap, marker, contentString) 
     } 
    }); 

}