Javascript 谷歌地图信息窗口显示循环的最后一个值
我使用for循环来显示标记和信息窗口。但是infowindow只显示循环的最后一个值 这是我使用的代码Javascript 谷歌地图信息窗口显示循环的最后一个值,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我使用for循环来显示标记和信息窗口。但是infowindow只显示循环的最后一个值 这是我使用的代码 function initialize() { try { var geocoder; var map; geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(
function initialize()
{
try
{
var geocoder;
var map;
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(41.511770, -72.809520);
var mapOptions = {
center: latlng,
zoom: 9,
disableDefaultUI: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
var markers = JSON.parse('[{"address":"40C Leslie Road,Bridgeport,CT","Description":"Bridgeport - 82 Unit Community"},{"address":"56 Ironwood Road,West Hartford,CT","Description":"West Hartford - 45 Unit Community"}]');
var infoWindow = new google.maps.InfoWindow();
// var address;
for (i = 0; i < markers.length; i++)
{
var address = markers[i];
geocoder.geocode({ 'address': address.address }, function (results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
//map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
icon:'Images/pin.png',
position: results[0].geometry.location
});
google.maps.event.addListener(marker, "click", function (e)
{
infoWindow.setContent("<div style='border:0px solid red;height:auto;;width:auto;'>" + address.Description + "</div>");
infoWindow.open(map, marker);
});
}
else {
//alert("Geocode was not successful for the following reason: " + status);
}
});
// map.setCenter(new google.maps.LatLng(41.511770, -72.809520))
}
}
catch (ex)
{
alert(ex.message);
}
}
google.maps.event.addDomListener(window, "load", initialize);
函数初始化()
{
尝试
{
var地理编码器;
var映射;
geocoder=新的google.maps.geocoder();
var latlng=新的google.maps.latlng(41.511770,-72.809520);
var mapOptions={
中心:拉特林,
缩放:9,
disableDefaultUI:true,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
map=new google.maps.map(document.getElementById('map_canvas'),mapOptions);
var markers=JSON.parse(“[{”地址“:“康涅狄格州布里奇波特莱斯利路40C号”,“说明“:“布里奇波特-82单元社区”},{”地址“:“康涅狄格州西哈特福德铁木路56号”,“说明“:“西哈特福德-45单元社区”}”);
var infoWindow=new google.maps.infoWindow();
//var地址;
对于(i=0;i
请帮帮我
谢谢,
Venkat.问题在于
geocoder.geocode
是一个异步函数。换句话说,在您的请求完成检索值之前,您的执行会离开for循环。因此,您将获得相同的地址值,因为它是for循环完成时的最后一个值,并且您将所有内容都放在相同的var address=…
变量中
要解决这个问题,您需要将geocoder.geocode
请求封装在一个自动执行的匿名函数中。因此,您的代码工作正常,因为var address=…
与请求一起定义在它自己的范围内。见下例:
...
// Start of self-executing anonymous function
(function() {
var address = markers[i];
...
以及:
(记住要激活图标图像,我在代码中禁用了它。)
为了进一步阅读,我推荐
干杯。我很好奇,我的解决方案对你有帮助吗?如果没有:提供一个问题所在的评论,这样也许我可以帮助你。如果是:考虑接受它作为解决方案。thnx!
...
// End of self-executing anonymous function
})();
// map.setCenter(new google.maps.LatLng(41.511770, -72.809520))
...