我正在尝试使用地理编码器功能在Google地图上创建地图标记。我正在对多个地址进行地理编码。我可以成功创建标记,但我还需要为每个标记创建一个信息窗口,显示有关该位置属性的各种不同信息。例如,我有一个以数组逗号分隔的价格信息。我已通过price [i]数组,但我无法检索每个价格并将其分配给正确的信息窗口。我得到的只是分配给每个标记的数组中的最后一个价格。我试图通过使用回调函数调用地理编码器来实现它,因为我无法直接将价格数组传递到地理编码器中 - 它返回未定义。有人可以帮忙吗?
地址数组看起来像[address1,address2,address3]
价格数组看起来像这样[500000,400000,300000]
var addresses = address.split(','),
prices = price.split(',');
var infowindow = new google.maps.InfoWindow();
for (var i = 0; i < addresses.length; i++) {
geocoder.geocode({'address': addresses[i]}, makeCallback(i));
}
function makeCallback(addressIndex) {
var geocodeCallBack = function(results, status) {
if (status != google.maps.GeocoderStatus.OK) {
console.log("Geocode was not successful for the following reason: " + status);
} else {
var point = results[0].geometry.location;
var i = addressIndex;
var marker = new google.maps.Marker({
map: map,
title: "",
position: results[0].geometry.location
});
infowindow.setContent('<p>'+ prices[i] + '</p>');
//Open the infowindow
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map, this);
});
main.setMap(map, point, titles[i], bounds);
}
}
return geocodeCallBack;
}
答案 0 :(得分:2)
您为每个标记设置了相同infowindow
的内容,因此无论点击哪个标记,它都显示相同的内容(分配了最后一个值)。
将var infowindow = new google.maps.InfoWindow();
行移至infowindow.setContent('<p>'+ prices[i] + '</p>');
之前的右侧,并显示正确的值。
或者,要在所有标记之间共享一个InfoWindow
(因此一次只能看到一个标记):
问题是,您在创建标记时设置infowindow
的内容,而不是在点击它们时设置内容。将infowindow.setContent('<p>'+ prices[i] + '</p>');
移至infowindow.open(map, this);
之前的标记点击功能中。 在这种情况下,请将infowindow
声明保留在原位。