2017-08-31 90 views
0

與谷歌地方的API工作,無法確定爲什麼autocomplete返回undefined這裏調用來獲取地方。 開發人員工具顯示的是。 address_components就是應該在調用返回到autocomplete.getPlace 無法獲取的未定義或空引用屬性「address_components」places api無法獲取屬性'address_components'的未定義或空引用

function initAutoCompleteDynamic() { 
var slideID = 99; 
var idx = 99 - slideID; 
var propcount = 5; 

    for (var i = 0; i < propcount; i++) { 
    var propaddress = "prop1address" + i; 
    var autocomplete = autocomplete + i; 
    autocomplete = new google.maps.places.Autocomplete(
     document.getElementById(propaddress)), 
     { types: ['geocode'] }; 
     autocomplete.addListener('place_changed', fillinAddressDynamic); 


    } 
} 

和fillinAddressDynamic

 var place=autocomplete.getPlace(): 
     for (var i = 0; i < place.address_components.length; i++) { 
    alert("i am in the loop"); 
    var addressType = place.address_components[i].types[0]; 
    var field = addressType; 
    var completeaddress1 = ''; 
    var propaddress = 'prop1address' + i; 
    var strnum = 'streetnumber' + i; 
    CR(i);//calling component resolver. 


    if (componentFormProduction[addressType]) { 
     var val = place.address_components[i][componentFormProduction[addressType]]; 
     document.getElementById(CR[addressType]).value = val; 

     if (field == "street_number") { 
      var streetnum = document.getElementById(strnum).value = val; 

     } 
     if (field == "route") { 
      if (streetnum) { 
       completeaddress1 = streetnum + ' ' + val; 
      } 
      else { 
       completeaddress1 = val; 
      } 
      document.getElementById('prop1address0').value = completeaddress1; 
     } 
    } 

} 

回答

0

這會發生,如果用戶(或你)點擊回車,而不點擊建議。

通常事件的序列是這樣的:

  1. 用戶進入輸入
  2. JavaScript的查詢自動完成對建議上的建議
  3. 用戶點擊
  4. JavaScript的查詢詳細,替換詳細的用戶輸入響應'字段(包括address_components觸發places_changed事件
  5. 的處理程序places_changed將通過調用getPlace()

然而獲得從詳細響應該位置目標,它也可以是這樣的:

  1. 用戶進入輸入
  2. JavaScript的查詢自動完成對建議
  3. 用戶無視建議和點擊Enter而不點擊其中一個
  4. JavaScript會觸發places_changed事件而無法erying詳細信息或修改用戶輸入
  5. 處理程序爲places_changed調用getPlace()並獲取幾乎空白的Place對象,只有name字段包含原始用戶輸入。

它是由你來決定如何處理原始用戶輸入做,這裏有一些例子:

此工具使用JavaScript的地理編碼服務,以搜索輸入: https://google-developers.appspot.com/maps/documentation/utils/geocoder/

這個例子(地址形式)不與它無關: https://google-developers.appspot.com/maps/documentation/javascript/examples/places-autocomplete-addressform

這(很基本的)例子將顯示一條錯誤消息,報告沒有詳細說明: https://google-developers.appspot.com/maps/documentation/javascript/examples/full/places-autocomplete

+0

不是因爲沒有選擇地址,我相信這是由於調用的異步性質,這是來自谷歌API的動態加載數據,我認爲修復將使用自定義的延遲對象,它似乎是一個時間錯誤有時它有時它不會推遲應該修復它/使它等待足夠長的時間來完成。 – webdev8183

相關問題