Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌地图API v3-所有标记共享相同的信息窗口_Javascript_Google Maps_Google Maps Api 3_Google Maps Markers_Infowindow - Fatal编程技术网

Javascript 谷歌地图API v3-所有标记共享相同的信息窗口

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

我到处都在挖,但我似乎弄不明白。这快把我逼疯了!一般来说,我对javascript是个新手,所以我无法完全理解如何翻译才能解决我的问题。我注意到很多人都有这个问题,但他们似乎都使用比我更高级(或更令人困惑)的代码

我一直有一个问题,我所有的标记共享相同的内容

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”引用我的标记的名称。