2016-12-28 74 views
0

这是我用来getPlace()它总是返回undefined对象的函数:为什么Google地图getPlace()总是返回Undefined对象?

var element = document.getElementById('hdnOldAddress'); 
var AutoCompleteAddress2; 
element.value = 'Marketfair Mall 1916 Skibo Road Fayetteville NC 28314'; 

autocomplete2 = new google.maps.places.Autocomplete(element); 


autocomplete2.addListener('place_changed', function() { 
    var place2 = autocomplete2.getPlace(); 
    if (place2.address_components) { 
     AutoCompleteAddress2 = [ 
      (place2.address_components[0] && place2.address_components[0].short_name || ''), 
      (place2.address_components[1] && place2.address_components[1].short_name || ''), 
      (place2.address_components[2] && place2.address_components[2].short_name || ''), 
      (place2.address_components[3] && place2.address_components[3].short_name || ''), 
      (place2.address_components[4] && place2.address_components[4].short_name || ''), 
      (place2.address_components[5] && place2.address_components[5].short_name || ''), 
      (place2.address_components[6] && place2.address_components[6].short_name || ''), 
      (place2.address_components[7] && place2.address_components[7].short_name || ''), 
      (place2.address_components[8] && place2.address_components[8].short_name || ''), 
      (place2.address_components[9] && place2.address_components[9].short_name || ''), 
      (place2.address_components[10] && place2.address_components[10].short_name || ''), 
      (place2.address_components[11] && place2.address_components[11].short_name || ''), 
      (place2.address_components[12] && place2.address_components[12].short_name || ''), 
      (place2.address_components[13] && place2.address_components[13].short_name || ''), 
      (place2.address_components[14] && place2.address_components[14].short_name || ''), 
     ].join(' '); 
    } 
}); 
google.maps.event.trigger(autocomplete2, 'place_changed'); 

编辑

替换this.getPlace()autocomplete2.getPlace()

回答

0

编辑:没关系,我错了。在这段代码中,this = autocomplete2。

问题是place_changed不会被触发...


一个你遇到的问题是,“这”是不是你希望它是什么。您不能在处理事件的函数中使用“this”(表示自动完成的实例)(在place_changed上)。里面那些事件的功能这个变量是指受到影响的元素(点击,悬停,...)

试试这个:

取代VAR place2 = this.getPlace();通过var place2 = autocomplete2.getPlace();

让我知道,如果这个固定(否则,我们需要进一步研究)

+0

我试过了,用'var place2 = autocomplete2.getPlace();'替换,但不工作。获取相同的错误。 – JMD

+0

我们正在手动设置'元素'(文本框)的值,而不是从谷歌地图提供的自动建议下拉列表中进行选择。这是我们没有得到地方的原因吗? – JMD

+0

问题是place_changed事件的触发器。 – geocodezip

1

这是我用过的替代品以上。而不是使用Autocomplete()我已经使用AutocompleteService(),它返回predicted地方,并使用该地方的地址,我把它传递到geocodingmap显示位置的预期。

var service = new google.maps.places.AutocompleteService(); 
service.getPlacePredictions({ input: 'Marketfair Mall 1916 Skibo Road Fayetteville NC 28314' }, function (predictions, status) {      
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
     matchAddress = predictions[0].structured_formatting.secondary_text; 
     //Add further processing for geocoding for found address. 
    } 
}); 
+0

这并没有完全解决我的问题,但帮助我的方式!那谢谢啦!!基本上我用google.maps.places替换了自动填充。 –

+0

...更完整的答案在这里https://stackoverflow.com/questions/48817397/google-maps-api-autocomplete-getplace-inconsistently-returns-geometry/49018363#49018363 –

相关问题