在谷歌地图上的Infowindow无法正常工作

时间:2011-12-30 05:44:29

标签: javascript google-maps-api-3

我正在使用谷歌地图api v3和js我试图在地图上的每个标记上打开infowndow但是通过我的代码它不打开这里是我的代码示例请检查它并告诉我错误在哪里< / p>

  <script type="text/javascript">
 var map;

 var markers = new Array();

 function initialize() {
    var map_center = new google.maps.LatLng(31.2330555556,72.3330555556);


var GPS = <%=GPS %>
     var myOptions = {
      zoom: 8,
      scaleControl:true,
      pancontrol: true,
      streetViewControl: true,
      center: map_center,
      mapTypeControl: true,
      mapTypeControlOptions: {
      style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
    },
      mapTypeId: google.maps.MapTypeId.HYBRID
    }    
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    var infowindow = new google.maps.InfoWindow();


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

          var image = 'ico/no.png';

          var ContentString = GPS[i].TITLE;
          markers[i] = new google.maps.Marker(
          { 
           position: GPS[i].GPS,
           map: map,
           draggable:true,
           icon:image,
           title:GPS[i].TITLE
           });                      

            google.maps.event.addListener(markers[i], 'click', function() {
            infowindow.setContent(ContentString);
            infowindow.open(map,markers[i]);
            });             
         }    
      }
</script>

3 个答案:

答案 0 :(得分:0)

请尝试以下代码:

google.maps.event.addListener(markers[i], 'click', function() { 
            infowindow.setContent(ContentString); 
            infowindow.open(map,this); 
            }); 

答案 1 :(得分:0)

我最近使用与你相同的api完成了一个程序。面对同样的问题,我发现关键因素是 addlistener 的功能在循环结束后会起作用。据说变量'i'在达到函数时达到最大化值 addlistener working.So我已经添加了几个步骤来处理这个问题。你可以看看我的,我希望它对你有所帮助。

function ShowParkingPoints() {

    var adNum=document.getElementById("tableOne").rows.length;
    var i;
    var j;
    var l;
    var ly;
    for (i=1;i<adNum;i++)
    {
        for(j=1;j<5;j++)
        {
            var k=i-1;

                addArray[k]+=document.getElementById("tableOne").rows[i].cells[j].innerHTML;
        }
    }
    for (i=0;i<adNum-1;i++){
            var image = new sogou.maps.MarkerImage('images/flag.png',
              new sogou.maps.Size(60, 60),
              new sogou.maps.Point(0,0),
              new sogou.maps.Point(0, 60));
            var shape = {
              coord: [1, 1, 1, 20, 18, 20, 18 , 1],
              type: 'poly'
          };

            geocoder.geocode( { 'address': addArray[i]}, function(results, status) {
              if (status == sogou.maps.GeocoderStatus.OK) {
                var str=results[0].formatted_address;
                //infowindow.setContent(str);
                 var marker1= new sogou.maps.Marker({
                    map: map,
                icon: image,
                    shape: shape,
                    draggable:true,  
                    position: results[0].geometry.location
                });
                 i=i-1
                 markerArrayS[i]=marker1;
                 locationArray[i]=results[0].geometry.location;
                  sogou.maps.event.addListener(markerArrayS[i], 'click', function(event) {
                    makerClicked(event.latLng);
            });
              } else {
                alert("Geocode was not successful for the following reason: " + status);
              }
            });
    }
    map.setCenter(mapCenter);
            map.setZoom(13);

}

答案 2 :(得分:0)

我认为当你开始登录事件观察者时,你只需要使用'i = i-1'来代替'i'。你可以尝试一下。在某种程度上,当您想要将它们读出时,您需要注意存储在数组中的顺序。

相关问题