javascript - Google Maps API V3 - 信息框和循环问题

标签 javascript google-maps google-maps-api-3

我正在使用 Google Maps API V3,但我的信息框遇到了问题。我的代码只显示我最后一个标记的信息框。我不知道为什么。可能是关闭问题但不确定。

这是我的代码:

var directionsDisplay;
var directionsService;
var info;
var i;

function initialize() {
        var markers=[];
        var GeocoderOptions;
        var myGeocoder;
        var temp;
        info = [
        ['57 Avenue Joseph Kessel 78180 Montigny-le-Bretonneux','Paul VERLAINE','Testinfo'],
        ['24 Rue du champ d avoine 78180 Mintigny-le-Bretonneux','Charles PEGUY','Testinfo'],
        ['21 Rue du Poirier Saint Martin 78180 Mintigny-le-Bretonneux','Maurice GENEVOIX','Testinfo'],
        ['13 Rue des Pyrenees 78180 Montigny-le-Bretonneux','Neil COSAQUE','Testinfo'],
        ['14 Rue des Pyrenees 78180 Montigny-le-Bretonneux','Louise THEVENOUX','Testinfo'],
        ['9 Rue des Bleuets 78180 Montigny-le-Bretonneux','Melanie JARNET','Testinfo'],
        ['10 Rue des Bleuets 78180 Montigny-le-Bretonneux','Antony JARNET','Testinfo'],
        ['30 Rue de la Republique 78180 Montigny-le-Bretonneux','Erin BARTOUT','Testinfo'],
        ['31 Rue de la Republique 78180 Montigny-le-Bretonneux','Fabien BARTOUT','Testinfo'],
        ['29 Rue de la Republique 78180 Montigny-le-Bretonneux','Christophe BARTOUT','Testinfo']
        ];
        var pinImage;
        var marker;
        var loc =new google.maps.LatLng(48.772, 2.028);
        var mapOptions = {
          center: loc,
          zoom: 14,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        var map = new google.maps.Map(document.getElementById("map-canvas"),
            mapOptions);
        directionsDisplay = new google.maps.DirectionsRenderer();
        directionsService = new google.maps.DirectionsService();

        directionsDisplay.setMap(map);
        directionsDisplay.setPanel(document.getElementById('directionsPanel'));

        myGeocoder = new google.maps.Geocoder();

        for(i=0;i<info.length;i++){
            GeocoderOptions={
                'address' : info[i][0],
                'region':'FR'       
            };
            myGeocoder.geocode( GeocoderOptions, function(i){
            return function(results, status){

                if(status == google.maps.GeocoderStatus.OK){
                marker = new google.maps.Marker({
                        position: results[0].geometry.location,
                        map: map,
                        title: info[i][1],
                        icon: pinImage
                    });
                markers.push(this);
                //var contentMarker = 'Testinfo';
                var infoWindow = new google.maps.InfoWindow(/*{
                    content : contentMarker
                }*/);
                google.maps.event.addListener(marker, 'click', function() {

                infoWindow.setContent(info[i][2]);
                infoWindow.open(map,marker);
            }); 

                } else {
                    alert("L'adresse n'a pas pu etre geocodee avec succes.");
                }

            }
            }(i));      
        }
         calcRoute();

      }
      function calcRoute(){

            var request = {
                origin: info[5][0],
                destination: info[1][0],
                travelMode: google.maps.TravelMode.DRIVING
            };

            directionsService.route(request, function(response,status){
                if(status==google.maps.DirectionsStatus.OK){
                //alert("Je passe ici2");
                    directionsDisplay.setDirections(response);
                }
            });
        }
      google.maps.event.addDomListener(window, 'load', initialize);

最佳答案

这似乎是关闭问题:您获得了最后一个索引的信息窗口。我添加了一个新功能:

function addInfoWindowOnEvent(marker, infoWindow, map, event) {
    google.maps.event.addListener(marker, event, function () {
        infoWindow.open(map, marker);
    });
}

并注释掉/更改了事件监听器的部分:

                    //google.maps.event.addListener(marker, 'click', function() {
                    infoWindow.setContent(info[i][2]);
                    //infoWindow.open(map,marker);
                    //});
                    addInfoWindowOnEvent(marker, infoWindow, map, 'click');

infowindow 的文本略有扩展以查看差异。之前只是testinfo

此外,我还从标记中注释掉了变量 pinImage,因为它未定义。

参见 example at jsbin

关于javascript - Google Maps API V3 - 信息框和循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20428346/

相关文章:

javascript - HTML:无法使用 Tab 键访问链接

javascript - 用 Ajax 响应替换 DOM 节点

javascript - “node keystone”给出 'libsass' 绑定(bind)未找到错误

php - 随机生成圆内坐标

android - 如何在 Android 的谷歌地图中绘制徒手多边形?

css - 仅限 Chrome : Fixed Div w/Google Map scrolls when other div scrolls

javascript - 在 Javascript 中获取变量的名称和字符串

android - Google place api,想要获得最近的位置

google-maps - 让所有街道在 Google map 视口(viewport)中可见

javascript - Google Maps API v3 中缺少方法。我如何模拟 latRadians() 和 lngRadians()?