2017-07-14 30 views
-1

下午好! 我有一个谷歌地图绘制标记列表, 我需要显示的地址,当我点击标记 使用下面的代码,它显示的最后一个标记的地址在google标记列表中添加地址

function updatePontos() { 

     markers = new Array();   
     var v = '#{TrPontoTaxiSB.pontosListTaxi}'.replace("[","").replace("]","");       
     var arr2 = v.split(","); 

     for (val2 of arr2) { 
      if (val2 != "") { 
       var pts = val2.split(";"); 
       var infowindow = new google.maps.InfoWindow(); 
       var marker = new google.maps.Marker({ 
        position: {lat: parseFloat(pts[1]), lng: parseFloat(pts[2])}, 
        draggable: false, 
        raiseOnDrag: false, 
        map: map,      
        title: pts[0], 
        icon: '#{facesContext.externalContext.requestContextPath}/resources/images/taxi_50.png' 
       }); 
       google.maps.event.addListener(marker, 'click', function() { 
         infowindow.setContent(pts[4] + " <br />" + pts[5] + " <br />" + pts[6]); 
         infowindow.open(map, this); 
        });          
       markers.push(marker);     
      } 
     }      
    } 

有谁知道如何根据选定的标记显示地址?

+0

参见[谷歌地图JS API V3 - 简单多个标记示例](https://stackoverflow.com/questions/3059044/google- maps-js-api-v3-simple-multiple-marker-example),接受的答案通过函数闭包来解决你的问题。 – geocodezip

回答

0

首先,看起来你现在不知道“var”的范围是什么。 Here是应该帮助你的东西。

您需要了解执行事件侦听器时代码中“infowindow”指向的内容。由于该变量在循环的每次迭代中都不会重新声明,因此无论您点击什么标记,它都会始终指向您创建的最后一个infoWindow。您还需要利用以下事实:即使是偶数听众“this”指向用户点击的标记。

要解决实际问题,您还需要了解closures

这是我想到的第一个解决方案,可能有更优雅的解决方案,但至少这个与您自己的代码有些相似之处。我无法测试它,所以让我知道它是否以及如何失败。

function updatePontos() { 

    var markers = []; 
    var infowindows = []; 
    var count = 0;  
    var v = '#{TrPontoTaxiSB.pontosListTaxi}'.replace("[","").replace("]","");       
    var arr2 = v.split(","); 
    var pts; 

    for (val2 of arr2) { 
     if (val2 != "") { 
      pts = val2.split(";"); 
      infowindows[count] = new google.maps.InfoWindow(); 
      infowindows[count].setContent(pts[4] + " <br />" + pts[5] + " <br />" + pts[6]); 
      markers[count] = new google.maps.Marker({ 
       position: {lat: parseFloat(pts[1]), lng: parseFloat(pts[2])}, 
       draggable: false, 
       raiseOnDrag: false, 
       map: map, 
       title: pts[0], 
       icon: '#{facesContext.externalContext.requestContextPath}/resources/images/taxi_50.png' 
      }); 
      markers[count]._infoWindowIndex = count; 
      google.maps.event.addListener(markers[count], 'click', function() { 
       infowindows[this._infoWindowIndex].open(map, this); 
      }); 
     } 
     count++; 
    }      
} 

编辑:改吃剩的引用标记,标记[计]

+0

非常感谢! 它的工作,我只是不得不将'标记[计数]'更改为'var marker' 我现在的问题是,气球不关闭。我需要找到一种方法来关闭最后一个打开的气球。 –

+0

对不起,它不起作用,因为当我应该将它们更改为“marker [count]”时,我留下了一些对“marker”的引用。我更新了代码。 – MySidesTheyAreGone

+0

看,我会很残酷;如果你认为在我上面的代码中使用“var marker”是一个有效的修复方法,那么你不需要做这些。您需要更多地学习JS,从我链接的页面开始。对不起,如此生硬。 – MySidesTheyAreGone

相关问题