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

我的猜測是函數調用會創建變量持有的值的持久性副本,而不僅僅是指向它們的指針。