2012-07-03 2 views
0

Ma fonction javascript getLatLng fonctionne très bien lorsqu'elle est appelée par window.onload. Mais quand j'utilise le gestionnaire pour l'appeler, je reçois une position (NaN, NaN) du géocodeur.Le géocodage renvoie (NaN, Nan) sur le deuxième appel

Pourquoi cela ne fonctionne-t-il pas lorsque je clique sur le bouton "Soumettre", mais fonctionne très bien avec window.onload?

<script type="text/javascript" 
    src="http://maps.googleapis.com/maps/api/js?key=MYSECRETKEYHERE&sensor=false"> 
</script>  

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> 


<form id="update_info" method="post" action="{{upload_url}}" enctyp="multipart/form-data"> 
<input name="address" id="address" type="text" value="100 W Main St Lehi, UT"/> 
<input name="latlng" id = "latlng" type="text" value=""/> 
<input name="update_reseller_button" id="update_reseller_button" type="submit"> 
</form> 


<script> 

function getLatLng() 
{ 
    var geocoder = new google.maps.Geocoder(); 

    var theaddress = document.getElementById('address').value; 
    var position = new google.maps.LatLng(); 

    geocoder.geocode({'address': theaddress}, function(results, status 
    ) 
    {      
     position = results[0].geometry.location;     
     document.getElementById('latlng').value = position.toString(); 
    }); 
    return position; 
} 

$('#update_info').submit(function() 

    { 
    alert('The Position is: ' + getLatLng().toString()); 
    return true; 
    }); 

    window.onload = getLatLng(); 

</script> 

EDIT: Correction d'une faute dans le gestionnaire pointant vers le mauvais formulaire

EDIT 2: fixe plus les fautes de frappe

EDIT 3: Changement si alerte montre la valeur de la position

+0

Qu'est-ce que est l'élément ' adresse'? Il doit contenir la valeur à transmettre au géocodeur, mais n'apparaît nulle part. –

+0

@AndrewLeach Désolé, je viens de le changer afin qu'il fonctionne correctement maintenant. Si vous mettez le texte dans un fichier html, changez la clé d'api à votre propre, cela devrait fonctionner et afficher la valeur de la position. Merci! – ChickenFur

Répondre

2

votre getLatLng-fonction ne fonctionnera jamais comme prévu, il aura toujours r renvoie le résultat du géocodage, car le géocodage est une requête asynchrone.

Ce:

window.onload = getLatLng(); 

... appelle la fonction (non onload, immédiatement), et la fonction exécutera les instructions, mais aussi de retour (NaN, NaN)

0

Vous pouvez essayez ceci

if (status == google.maps.GeocoderStatus.OK) { 
    document.getElementById('latlng').value=results[0].geometry.location.lat()+", "+results[0].geometry.location.lng(); 
}