2014-07-25 30 views
1

我試圖描述我的問題儘可能容易.. 當我提交表單時,我需要調用另一個函數。我嘗試了提交,但不幸的是它無法正常工作,因爲我需要調用的函數是Google Maps API,從用戶選擇位置的文本框中獲取座標。函數從未被調用,或者它似乎也被調用晚..所以我嘗試這樣:谷歌地圖API將不會返回提交座標

<input type="button" value="Search" name="submitBtn" id="subBtn1" onclick="onSubmit1();"> 

和功能onSubmit1()是如下:

function onSubmit1() { 
    codeAddress(); 
// document.forms["searchForm"].submit(); 
} 

點擊按鈕,該功能的工作原理.. codeAddress讓我從谷歌緯度和經度後服務器並將其預填充到我的searchForm中的文本框中。

但是,如果我刪除多布爾斜線和要提交的表單,會發生以下情況:

表單提交,但緯度和經度始終是空字符串..

任何想法..是否有可能,onSubmit1函數中的第二行只是不等待goole來完成它的工作?

感謝您的任何提示..

請知道的形式和它的所有功能很好地工作,如果我例如通過自己設置的座標並提交表格,然後..有在

沒問題

編輯

function codeAddress() { 
    geocoder = new google.maps.Geocoder(); 
    var address = document.getElementById("my-address").value; 
    geocoder.geocode( 
     { 'address': address}, 
     function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       var lat = results[0].geometry.location.lat(); 
       var lng = results[0].geometry.location.lng(); 
       document.getElementById("my-lat").value = lat; 
       document.getElementById("my-lng").value = lng; 
      } else { 
       //alert("Geocode was not successful for the following reason: " + status); 
      } 
     }); 
} 
+0

請出示'codeAddress()'函數的定義。我**猜測**是一個立即返回的異步函數。 – Steve

+0

function codeAddress(){ geocoder = new google.maps.Geocoder(); var address = document.getElementById(「my-address」).value; geocoder.geocode({'address':address},function(results,status)if(status == google.maps.GeocoderStatus.OK){lather = results [0] .geometry.location.lat ); var lng = results [0] .geometry.location.lng(); document.getElementById(「my-lat」)。value = lat; document.getElementById(「my-lng」)。value = lng ; } else { // alert(「Geocode由於以下原因而不成功:」+ status); } }); } –

+0

嗨,感謝您的快速回復..我沒有找到如何正確格式化功能,所以帖子看起來不像一團糟,對不起 –

回答

0

你的問題是,codeAddress是異步的(以及地理編碼對象的地理編碼方法),並立即爲此回報。

那你必須做的僅僅是提交表單的異步回調:

function codeAddress() { 
    geocoder = new google.maps.Geocoder(); 
    var address = document.getElementById("my-address").value; 
    geocoder.geocode( 
     { 'address': address}, 
     function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       var lat = results[0].geometry.location.lat(); 
       var lng = results[0].geometry.location.lng(); 
       document.getElementById("my-lat").value = lat; 
       document.getElementById("my-lng").value = lng; 
       //now submit form 
       document.forms["searchForm"].submit(); 
      } else { 
       //alert("Geocode was not successful for the following reason: " + status); 
      } 
     }); 
} 
+0

男人! ,YOu是偉大的,你應該改變你的地位傳奇。非常感謝.. !! –

+0

@JiriBorek沒問題,很高興我能幫到你。請標記這個答案是正確的,如果它幫助 – Steve

+0

我想,但我在這裏是全新的,需要獲得聲望點..我這樣做,一旦我得到他們 –