Javascript 谷歌地图API v3-所有标记共享相同的信息窗口
我到处都在挖,但我似乎弄不明白。这快把我逼疯了!一般来说,我对javascript是个新手,所以我无法完全理解如何翻译才能解决我的问题。我注意到很多人都有这个问题,但他们似乎都使用比我更高级(或更令人困惑)的代码 我一直有一个问题,我所有的标记共享相同的内容Javascript 谷歌地图API v3-所有标记共享相同的信息窗口,javascript,google-maps,google-maps-api-3,google-maps-markers,infowindow,Javascript,Google Maps,Google Maps Api 3,Google Maps Markers,Infowindow,我到处都在挖,但我似乎弄不明白。这快把我逼疯了!一般来说,我对javascript是个新手,所以我无法完全理解如何翻译才能解决我的问题。我注意到很多人都有这个问题,但他们似乎都使用比我更高级(或更令人困惑)的代码 我一直有一个问题,我所有的标记共享相同的内容 function initialize() { var myOptions = { center: new google.maps.LatLng(34.151271, -118.449537), zoom: 9, m
function initialize() {
var myOptions = {
center: new google.maps.LatLng(34.151271, -118.449537),
zoom: 9,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: false,
streetViewControl: false,
panControl: false,
zoomControl: true,
zoomControlOptions: { style: google.maps.ZoomControlStyle.SMALL },
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
setMarkers(map, clubs);
}
var clubs = [
['Poop', 34.223868, -118.601575, 'Dookie'],
['Test Poop', 34.151271, -118.449537, 'Test Business']
];
function setMarkers(map, locations) {
var image = new google.maps.MarkerImage('images/image.png',
new google.maps.Size(25, 32),
new google.maps.Point(0,0),
new google.maps.Point(0, 32)
);
var shape = {
coord: [1, 1, 1, 20, 18, 20, 18 , 1],
type: 'poly'
};
for (var i = 0; i < locations.length; i++) {
var club = locations[i];
var myLatLng = new google.maps.LatLng(club[1], club[2]);
var infowindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
icon: image,
shape: shape,
title: club[0],
});
google.maps.event.addListener(marker, 'click', function(){
infowindow.setContent(club[3]);
infowindow.open(map, this);
});
}
}
函数初始化(){
变量myOptions={
中心:新google.maps.LatLng(34.151271,-118.449537),
缩放:9,
mapTypeId:google.maps.mapTypeId.ROADMAP,
mapTypeControl:false,
街景控制:错误,
泛控制:错误,
动物控制:对,
ZoomControl选项:{style:google.maps.zoomControl.SMALL},
};
var map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
设置标记(地图、俱乐部);
}
var俱乐部=[
[Poop',34.223868,-118.601575,'Dookie'],
['Test Poop',34.151271,-118.449537,'Test Business']
];
功能设置标记(地图、位置){
var image=new google.maps.MarkerImage('images/image.png',
新谷歌地图大小(25,32),
新google.maps.Point(0,0),
新google.maps.Point(0,32)
);
变量形状={
坐标:[1,1,1,20,18,20,18,1],
类型:“poly”
};
对于(变量i=0;i
我知道我很差劲,但请有人帮帮我P
设置标记对象(var marker=new…)时,将此行“title:club[0]”更改为“title:club[i]”。是的,只需将0更改为i
这应该可以解决问题 请尝试此链接,以获取有关谷歌地图API的教程和示例这应该非常简单且有用。问题在于您正在为循环中的标记单击设置事件侦听器。所以所有的标记最后只得到最后一个标记的内容。试试这个。创建新的全局函数:
function bindInfoWindow(marker, map, infowindow, html) {
marker.addListener('click', function() {
infowindow.setContent(html);
infowindow.open(map, this);
});
}
然后在循环中,替换以下内容:
google.maps.event.addListener(marker, 'click', function(){
infowindow.setContent(club[3]);
infowindow.open(map, this);
});
为此:
// add an event listener for this marker
bindInfoWindow(marker, map, infowindow, club[3]);
谢谢邓肯!它工作得很好,需要2秒钟来修复。你就是那个人@邓肯非常感谢你!大家好,这个解决方案对我也很有效,非常感谢。然而,我想了解为什么它是这样工作的,而不是另一种?我们仍然在循环中绑定侦听器,但是代码现在被包装在一个函数中。为什么会有什么不同?谢谢@通过这种方式,您可以确保每个标记的事件侦听器每次都使用您希望显示的文本。另一种方式是,您仍然将事件侦听器附加到每个标记上,但是在单击标记时,“信息窗口”中的内容来自
club[3]
所拥有的内容。在循环结束的时候,不管它是什么,谢谢!寻找了很久的解决方案,这个简单的代码也解决了我的问题!当我尝试将“0”替换为“I”时,它删除了我的上一个标记,使它们都无用“0”引用我的标记的名称。