我正在使用Google Maps API v3 javascript。我正在使用Geocoder功能,我将传递城市名称并将其绘制在地图上。除了这个标记,我想为每个标记添加一个单独的信息窗口,但我无法做到这一点。所有infowindows都显示为最后一个标记设置的内容,而不是为每个标记设置不同的信息窗口。请在下面找到javascript代码:
function initialize() {
geocoder = new google.maps.Geocoder();
var address = document.getElementById('address').value;
var jString = JSON.parse(address);
var infowindow;
for (var key in jString) {
contentStr = JSON.stringify(jString[key]); //This is step where I am setting the content which is independent for every maker
if (jString.hasOwnProperty(key)) {
geocoder.geocode( { 'address': key}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
infowindow = new google.maps.InfoWindow({
content: contentStr//Not able to access 'contentStr' set above.
});
infowindow.open(map,marker);
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
}
var latlng = new google.maps.LatLng(-34.397, 150.644);
var mapOptions = {
zoom: 8,
center: latlng
}
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
}
google.maps.event.addDomListener(window, 'load', initialize);
调试后我理解由于某种原因,变量' contentStr'在最后一次迭代期间设置'循环仅用于以下所有函数调用:
geocoder.geocode( { 'address': key}, function(results, status) {
所以基本上,我无法传递变量' contentStr'进入另一个函数的参数中定义的函数。我想我错过了一些基本的东西。有人可以指导我这个吗?
谢谢!
答案 0 :(得分:1)
我多次遇到同样的问题。从下面的链接被盗。您需要将infowindow附加到您的标记。
Marker content (infoWindow) Google Maps
function createMarker(lat, lon, html) {
var newmarker = new google.maps.Marker({
position: new google.maps.LatLng(lat, lon),
map: map,
title: html
});
newmarker['infowindow'] = new google.maps.InfoWindow({
content: html
});
google.maps.event.addListener(newmarker, 'mouseover', function() {
this['infowindow'].open(map, this);
});
}
第二种方式。 :
Google Maps API V3 infoWindow - All infoWindows displaying same content