-1

我非常感谢这个论坛的帮助。所以我要在地图上带上不同的标记组,并使用切换功能,效果很好。

不再起作用的是我的事件监听器用于打开标记信息窗口。

当我运行以下代码并单击其中一个标记时,它总是会弹出数组最后一个标记的信息窗口。所以该机制有效,但似乎不再有迭代。

我想了很多关于这个问题,但我没有得出结论。感谢您的帮助。

这是代码

 var deutschland = new google.maps.LatLng(51,9);


 function initialize(){

  var mapOptions = { zoom: 6,
                     center: deutschland,
                     streetViewControl: true,
                     scaleControl: true,
                     mapTypeControl: true,
                     mapTypeId: google.maps.MapTypeId.ROADMAP }


 var map = new google.maps.Map(document.getElementById("map-container"),mapOptions);


 lat_data = [

 ['mid',50.0010400,9.0730700,'company1','marker.png','infowindow text 1'],
 ['mid',50.2010057,8.2592738,'company2','marker.png','infowindow text 2'],
 ['West',50.7430120,7.1264100,'company3','marker_green.png','infowindow text 3'], 
  ....

 ];



   markers = [];
   var i, newMarker;

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

    var infowindow = new google.maps.InfoWindow({
       content: lat_data[i][5]
   });


var shadow = new google.maps.MarkerImage('http://maps.google.com/mapfiles/shadow.png,
   new google.maps.Size(37,32),
   new google.maps.Point(0,0),
   new google.maps.Point(0,32));

var image = 
new google.maps.MarkerImage('http://maps.google.com/mapfiles/'+lat_data[i][4],
   new google.maps.Size(20,32),
   new google.maps.Point(0,0),
   new google.maps.Point(0,32));

 newMarker = new google.maps.Marker({
   position: new google.maps.LatLng(lat_data[i][1], lat_data[i][2]),
   map: map,
   title: lat_data[i][3],
   icon: image,
   shadow: shadow
 });

 newMarker.category = lat_data[i][0];
 newMarker.setVisible(true);

   google.maps.event.addListener(newMarker,'click',function(){
     infowindow.open(map,newMarker);

  });
  google.maps.event.addListener(map,'click',function(){
      infowindow.close(map,newMarker);
  });

 markers.push(newMarker);
 }

 }

function displayMarkers(category) {
  var i;

 for (i = 0; i < markers.length; i++) {
   if (markers[i].category == category) {
     if (markers[i].getVisible()) {
          markers[i].setVisible(false); }

    else { markers[i].setVisible(true); } } }
4

1 回答 1

0

现在我回答我自己的问题(非常酷,我以前从未这样做过!!!)

根据 mozilla.org 关于闭包的教程,我编写了以下代码:

 .......
 iw = new google.maps.InfoWindow({
       content: lat_data[i][5]
   });

   function make_open_event_callback(iw){
       return function(){
          iw.open(map,this);
       };
   }
    function make_close_event_callback(iw){
       return function(){
          iw.close(map,this);
       };
   }

   google.maps.event.addListener(newMarker,'click',make_open_event_callback(iw));
  google.maps.event.addListener(map,'click',make_close_event_callback(iw));

 markers.push(newMarker);
于 2013-02-16T07:28:24.337 回答