Javascript Google Map错误标记获取事件属性

Javascript Google Map错误标记获取事件属性,javascript,google-maps,map,scope,google-maps-markers,Javascript,Google Maps,Map,Scope,Google Maps Markers,我正试图为谷歌地图上的每个标记添加一个事件侦听器,但由于某些原因,最后一个标记是唯一获得侦听器的标记 以下是出现问题的地图页面: 你看,当你点击任何一个标记时,只有左下角的一个会弹出html。我需要的是在单击的标记上出现弹出窗口 你知道这是什么原因吗 谢谢, Alex这是一个非常常见的问题 var映射; var信息窗口; var message=['This','is','the','secret','message']; 函数初始化(){ var mapDiv=document.getEle

我正试图为谷歌地图上的每个标记添加一个事件侦听器,但由于某些原因,最后一个标记是唯一获得侦听器的标记

以下是出现问题的地图页面:

你看,当你点击任何一个标记时,只有左下角的一个会弹出html。我需要的是在单击的标记上出现弹出窗口

你知道这是什么原因吗

谢谢,
Alex

这是一个非常常见的问题

var映射;
var信息窗口;
var message=['This','is','the','secret','message'];
函数初始化(){
var mapDiv=document.getElementById('map-canvas');
map=新的google.maps.map(mapDiv{
中心:新google.maps.LatLng(37.4419,-122.1419),
缩放:13,
mapTypeId:google.maps.mapTypeId.ROADMAP
});
infoWindow=new google.maps.infoWindow();
google.maps.event.addListenerOnce(map'tilesloadded',addMarkers);
}
函数addMarkers(){
var bounds=map.getBounds();
var soutwest=bounds.getsoutwest();
var northEast=bounds.getNorthEast();
var lngSpan=northEast.lng()-soutwest.lng();
var latSpan=northEast.lat()-soutwest.lat();
函数createMarker(地图、位置、编号){
var marker=new google.maps.marker({
职位:职位,,
地图:地图
});
google.maps.event.addListener(标记'click',函数(){
var myHtml='#'+number+'
'+message[number-1]; setContent(myHtml); 信息窗口。打开(地图、标记); }); } 对于(var i=1;i这里是与您网站的google地图类似的,但使用ajax时,我只在其上放置了3个“虚拟”坐标。如果您需要进一步的解释,请告诉我:

原因在回调函数中。在
initializeTrailheads()
函数中,您创建了一个局部变量名
marker
,并向其附加了一个单击事件。然后,您向信息窗口分配了标记,执行
infowindow.open(映射,标记)
google.map.event.addListener
有一个回调函数,当单击完成时,该函数在不同的范围内。因此,它基本上会获取其父对象范围内的
marker
变量,因为它本身没有。通常在触发单击事件时,该标记会成为最新的标记您初始化(哪一个是最后一个),并且基本上附加了信息窗口,该窗口之前没有链接到任何其他标记,因此会导致您的问题。您所要做的只是将变量
marker
替换为
this
,该变量引用正在单击的标记,应该可以解决您的问题:

 google.maps.event.addListener(marker, 'click', function() {
      infowindow.open(map, this);
 });

这只是我的想法。如果我没有在某些部分清楚地解释,请让我知道。

但我有什么特别的错误,我需要做不同的事情吗?谢谢!首先,你必须为同一事件注册侦听器。将它们减少为一个。然后构建信息窗口html(var contentString=“Hello
;)在click事件的函数中。你是说我有两个注册的侦听器吗?我刚刚检查了一下,似乎只有一个侦听器。可能我遗漏了什么。我的另一个侦听器是什么?@Genadinik它与范围和你为信息分配标记的方式有关window@Genadinik你必须明白什么是结束,因为这正是你所缺少的。请看这里
 google.maps.event.addListener(marker, 'click', function() {
      infowindow.open(map, this);
 });