0

私のjavascript関数getLatLngは、window.onloadによって呼び出されたときにうまく機能します。しかし、ハンドラーを使用してそれを呼び出すと、ジオコーダーから位置(NaN、NaN)を取得します。

送信ボタンをクリックしても機能しないのに、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>

編集:間違ったフォームを指すハンドラーのタイプミスを修正しました

編集2:より多くのタイプミスを修正

編集3:アラートが位置の値を表示するように変更されました

4

2 に答える 2

2

ジオコーディングは非同期リクエストであるため、getLatLng 関数は期待どおりに機能せず、ジオコーディングの結果を返すことはありません。

これ:

window.onload = getLatLng();

...関数を呼び出し(オンロードではなく、すぐに)、関数は命令を実行しますが、(NaN、NaN)も返します

于 2012-07-04T01:29:13.117 に答える
0

これを試すことができます

if (status == google.maps.GeocoderStatus.OK) {
    document.getElementById('latlng').value=results[0].geometry.location.lat()+", "+results[0].geometry.location.lng();
}
于 2012-07-03T22:58:16.230 に答える