2011-12-30 4 views
1

Я использую google map api v3 с js, и я пытаюсь открыть infowndow для каждого маркера на карте, но через мой код он не открывается здесь, это мой пример кода, пожалуйста, проверьте его и скажите мне, где ошибкаInfowindow на google map не работает

<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> 
+0

Любой, пожалуйста, ответьте на мой вопрос –

ответ

0

Попробуйте следующий код:

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

Спасибо, я получил ответ –

0

Я завершил программу недавно, используя тот же интерфейс, как ваш. Обращаясь к одной и той же проблеме, я обнаружил, что ключевым фактором является то, что функция addlistener будет работать после окончания цикла. Говорят, что переменная «i» достигла максимального значения, когда работала функция добавления addlistener. Поэтому я применил несколько шагов для решения этой проблемы. Вы можете взглянуть на мои, и я надеюсь, что это будет полезно для вас.

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); 

} 
+0

да Его хорошая идея для меня спасибо –

+0

Можете ли вы сказать мне немного, чтобы создать кластер маркеров в моем коде выше –

0

Я думаю, вам просто нужно использовать «я = я-1» заменить «я», когда вы начинаете войти в событие watcher.You может попробовать. В некотором смысле вы должны заметить, что порядок хранения в массивах, когда вы хотите их прочитать.