2017-08-31 88 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

相关问题