0

我使用google.maps javascript API v3。我需要在谷歌地图上用'点击'听众翻译一组城市地址标记。当用户点击地图上的标记时,我想要打开另一个窗口并显示与该地址相关的网址(另一个标签将是理想的)。Javascript封闭与google.maps.Geocoder :: geocode

我无法设法保持地址和网址之间的关系,因为我在google方法geocode()中使用了JavaScript Closure。

我有一组如

var addresses = [ '123 street street', '124 street street' ]; 
var urls = [ 'www.example.com/1', 'www.example.com/2' ]; 

然后我使用API​​地图

for (var i = 0; i<addresses.length; i++) 
{ 
    var address = addresses[i]; 
    var url = urls[i]; 
    geocoder.geocode(
     { 'address' : address }, 
    function(result, status) { 
     var x = url // url == "" 

     var marker = new google.maps.Marker({ 
      position: result[0].geometry.location, 
      map: map, 
      title:"Test" 
     }); 

     google.maps.event.addListener(marker, 'click', function(event){ 
      alert(url); 
      window.open(url); 
     },false); 
    } 
} 

匿名函数内部对地理编码和创建标记的地址,我该如何使用var url

回答

0

似乎解决方案是将所有内容分割成不同的函数。

function showAddress() { 

    //geocoder = new Geocoder(); 

    for (var i = 0; i<addresses.length; i++) 
    { 
     var address = addresses[i]; 
     var url = urls[i]; 

     findAddress(address,url); 
     pausecomp(400); 
     } 
} 

function findAddress(address,url) 
{ 
    geocoder.geocode(
     { 'address' : address }, 
     function(result, status) { 
      var marker; 
      if(status == google.maps.GeocoderStatus.OK) { 
       marker = new google.maps.Marker({ 
        position: result[0].geometry.location, 
        map: map, 
        title:"Longueuil" 
       }); 

      } 
      attachUrl(marker, url); 
     } 
    ); 
} 

function attachUrl(marker, url) 
{ 
    google.maps.event.addListener(marker, 'click', function(event){ 
     alert(url); 
     window.open(url); 
    },false); 
} 

我的猜测是函数调用会创建变量持有的值的持久性副本,而不仅仅是指向它们的指针。