为Google地图中的每个标记分配信息窗口

Shi*_*m91 5 javascript google-maps google-maps-api-3

关于将infowindow分配给地图中的每个标记,我遇到了问题.

JS代码:

for (i=0;i<location.length;i++){
    var id = location[i][0];
    var name = location [i][1];
    var pos = new google.maps.LatLng(location[i[3],location[i][4]);


    var contentString = id;
    var infowindow = new google.maps.InfoWindow({content:contentString});
    var marker= new google.maps.Marker({position: pos, map: map, title: id});

    marker.addListener('click', function() { infowindow.open(map, this);
Run Code Online (Sandbox Code Playgroud)

});

问题是我的点击处理程序将为每个标记显示相同的"id"(显示的id是我的数据库中我的LAST记录的id).有没有办法显示每个标记的每个infowindow?

Eug*_*nic 18

假设您的位置数组是从数据库中获取并填充的......

首先你有一个错误:

var pos = new google.maps.LatLng(location [i [3],location [i] [4]);

你应该修改你的括号并这样说:

var pos = new google.maps.LatLng(location [i] [3],location [i] [4]);

这是一个例子:

我试图尽可能多地关注你的例子,因为你没有指定一个数组并且创建了一个与你的数组相对应的数组(如果你想要你的名字你可以添加一个列)

循环:

  for (var i = 0; i < location.length; i++) {

    var marker = new google.maps.Marker({
        position: new google.maps.LatLng(location[i][1], location[i][2]),
        map: map,
        title: location[i][0]
    });

    google.maps.event.addListener(marker, 'click', (function(marker, i) {
        return function() {
            infowindow.setContent(location[i][0]);
            infowindow.open(map, marker);
        }
    })(marker, i));
}
Run Code Online (Sandbox Code Playgroud)

在循环之前声明你的infoWindow并在你的事件中提取它

Infowindow:

 var infowindow = new google.maps.InfoWindow();
Run Code Online (Sandbox Code Playgroud)

点击事件:

    google.maps.event.addListener(marker, 'click', (function(marker, i) {
     return function() {
         infowindow.setContent(location[i][0]);
         infowindow.open(map, marker);
     }
 })(marker, i));
Run Code Online (Sandbox Code Playgroud)

完整小提琴示例:http://jsfiddle.net/eugensunic/7TZFP/5/