我需要帮助让infowindow显示位置[i] [0]
中的值locations [i] [1]对地址值的工作正常,但我希望能够从var“locations”为infowindow中的每个标记设置一个自定义标题。
我可以定义一个var来设置内容和信息窗口的工作方式,但是对于每个标记都是一样的,而不是从var“locations”中提取
感谢任何帮助!
function initialize() {
geocoder = new google.maps.Geocoder();
var myOptions = {
zoom: 10,
center: new google.maps.LatLng(0, 0),
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(
document.getElementById("map_canvas"),
myOptions);
setMarkers(map, locations);
}
var locations = [
['Bondi Beach', '798 9th Ave, New York, NY', 4],
['Coogee Beach', '42 E 29th St, New York, NY', 5],
['Cronulla Beach', '56 W 25th St, New York, NY', 3],
];
function setMarkers(map, locations) {
var infowindow = new google.maps.InfoWindow();
var bounds = new google.maps.LatLngBounds();
var marker, i;
for (var i=0; i<=locations.length; i++) {
geocoder.geocode({'address': locations[i][1]}, function(results, status) {
marker = new google.maps.Marker({
position: results[0].geometry.location,
map: map,
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.open(map, marker);
infowindow.setContent(locations[i][0]);
}
})(marker, i));
bounds.extend(marker.getPosition());
map.fitBounds(bounds);
})
}
}
答案 0 :(得分:1)
正在发生的事情是click事件监听器正在使用i = 3
(循环结束后i的最后一个值),因此没有InfoWindow因为这个未定义的状态而出现。
由于引入了地理编码器,外部for
循环在点击侦听器分配给它们之前完成。因此,需要在地理编码之外的另一个函数范围包装器来保持i在侦听器中的正确值。
function setMarkers(map, locations) {
var infowindow = new google.maps.InfoWindow();
var bounds = new google.maps.LatLngBounds();
var marker, i;
//CHANGED REMOVED EQUALS SIGN
for (var i=0; i<locations.length; i++) {
//ADDED
(function(i) {
geocoder.geocode({'address': locations[i][1]}, function(results, status) {
marker = new google.maps.Marker({
position: results[0].geometry.location,
//REMOVED COMMA
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
//CHANGED ORDER
infowindow.setContent(locations[i][0]);
infowindow.open(map, marker);
}
})(marker, i));
bounds.extend(marker.getPosition());
map.fitBounds(bounds);
});
// ADDED
})(i);
}
}