2012-12-27 28 views
6

Google'ın DistanceMatrixService ile biraz oynuyorum. Aşağıdaki kod çalışır, ancak, geri arama işlevine başka bir parametreyi nasıl iletebilirim veya geri aramadaki değerlerden birini alabilir miyim?Javascript Pass parametresini Geri Çağırma veya Değişken Değeri Ayarla DistanceMatrixStatus

Örneğin: Ben (Results1 ve Results2) farklı sonuçlar göstermek istiyorum iki renklendirilmiş, bu yüzden ben
GoogleMapDistance (YourLatLong, DestLatLong gibi GoogleMapDistance işlevine başka bir değer geçmesine gerek duyarsınız düşünüyorum . TheDiv)
veya
geri arama document.getElementById ("Results1") dış harici ResultStr kapmak mümkün innerHTML = ResultStr; InnerHTM değerini document.getElementById işlevinin döndürülen değerine ayarlayın ("Results1"). InnerHTML = GoogleMapDistance (YourLatLong, DestLatLong);

sıkıştım. Bunu nasıl başarabilirim? Şu anda göründüğü gibi, sadece bu kodu bir kez çalıştırabileceğim ve sadece bir div'a yazabileceğim.

<div id="Results1"></div> 
<div id="Results2"></div> 

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> 
<script> 

function GoogleMapDistance(YourLatLong,DestLatLong) 
{ 
    var service = new google.maps.DistanceMatrixService(); 
    service.getDistanceMatrix(
    { 
    origins: [YourLatLong], 
    destinations: [DestLatLong], 
    travelMode: google.maps.TravelMode.DRIVING, 
    unitSystem: google.maps.UnitSystem.IMPERIAL, 
    avoidHighways: false, 
    avoidTolls: false 
    }, callback); 
} 

function callback(response, status) 
{ 
    if (status == google.maps.DistanceMatrixStatus.OK) 
    { 
    var origins = response.originAddresses; 
    var destinations = response.destinationAddresses; 
     for (var i = 0; i < origins.length; i++) 
     { 
      var results = response.rows[i].elements; 
      for (var j = 0; j < results.length; j++) 
      { 
       var element = results[j]; 
       var from = origins[i]; 
       var to = destinations[j]; 
       var distance = element.distance.text; 
       var duration = element.duration.text; 
       var ResultStr = distance + "&nbsp; (<i>" + duration + "</i>)"; 
      } 
     } 
    document.getElementById("Results1").innerHTML = ResultStr; 
    } 
} 

var YourLatLong = "45.4049,-122.797997"; 
var DestLatLong1 = "47.468893,-122.227978"; 
var DestLatLong2 = "61.221274,-149.831545"; 

GoogleMapDistance(YourLatLong,DestLatLong1); 

</script> 

cevap

11

Google geri arama çağırır nasıl değiştiremezsiniz, ancak bunu geri arama olarak kendi yerel işlevini çağırmak ve daha sonra (bir kapatma yoluyla) gibi istenilen ekstra argüman ekledikten sonra başka geri arama dediğimiz sahip olmasını sağlayabilirsiniz Bu; doğrudan ana fonksiyonu değişkenlere erişimi vardır böylece

function GoogleMapDistance(YourLatLong,DestLatLong, item) 
{ 
    var service = new google.maps.DistanceMatrixService(); 
    service.getDistanceMatrix(
    { 
    origins: [YourLatLong], 
    destinations: [DestLatLong], 
    travelMode: google.maps.TravelMode.DRIVING, 
    unitSystem: google.maps.UnitSystem.IMPERIAL, 
    avoidHighways: false, 
    avoidTolls: false 
    }, function(response, status) {callback(response, status, item)}); 
} 

Veya, sadece geri arama satır içi tanımlayabiliriz:

function GoogleMapDistance(YourLatLong,DestLatLong, item) 
{ 
    var service = new google.maps.DistanceMatrixService(); 
    service.getDistanceMatrix(
    { 
    origins: [YourLatLong], 
    destinations: [DestLatLong], 
    travelMode: google.maps.TravelMode.DRIVING, 
    unitSystem: google.maps.UnitSystem.IMPERIAL, 
    avoidHighways: false, 
    avoidTolls: false 
    }, function callback(response, status) 
    { 
     // you can access the parent scope arguments like item here 
     if (status == google.maps.DistanceMatrixStatus.OK) 
     { 
     var origins = response.originAddresses; 
     var destinations = response.destinationAddresses; 
      for (var i = 0; i < origins.length; i++) 
      { 
       var results = response.rows[i].elements; 
       for (var j = 0; j < results.length; j++) 
       { 
        var element = results[j]; 
        var from = origins[i]; 
        var to = destinations[j]; 
        var distance = element.distance.text; 
        var duration = element.duration.text; 
        var ResultStr = distance + "&nbsp; (<i>" + duration + "</i>)"; 
       } 
      } 
     document.getElementById("Results1").innerHTML = ResultStr; 
     } 
    } 

)} 
+0

Teşekkür! İlk çözümünle gittim. Harika çalışıyor. – Soren

+1

Eğer ilk alternatifinizdeki noktayı kaçırmazsam, bu 'geri arama (yanıt, durum, madde) 'bedeninde tekrar bir başka geri çağırma' item (some_arg) 'çağrılır ... değil mi? – SASM

İlgili konular