我希望在手动触发此事件时能够从 autocomplete.getPlace()
返回数据。
基本上,我有一个函数可以获取用户在 Lat/Lng
中的位置,之后我想获取用户的 getPlace(),因为有更多有用的数据,例如 place_id、照片(最想要的)、引用资料等
到目前为止,我几乎可以做所有事情,我什至可以手动触发事件,但它返回undefined
。这是我到目前为止的代码:
var latLng = response; //Comes from another function
geocoder.geocode({'location': latLng}, function(results, status) {
if (status === 'OK') {
if (results[1]) {
var fullAddress = results[0].formatted_address;
var input = document.createElement("input");
input.setAttribute("value", fullAddress);
var autocomplete = new google.maps.places.Autocomplete(input);
google.maps.event.addListener(autocomplete, 'place_changed', function () {
var thisPlace = autocomplete.getPlace();
console.log(thisPlace);
});
google.maps.event.trigger(autocomplete, 'place_changed');
}
}
});
这里的一切都正常,但是 autocomplete.getPlace()
的返回是未定义
。
如果运行相同的函数,但来自 native 自动完成元素,则返回是正确的。
我做错了什么?
最佳答案
看起来您想要相当于 Android Place Picker 的 JavaScript 。 Places library中没有这样的小部件。考虑filing a feature request .
您当前的方法似乎遵循以下原则:
- 将用户纬度反向地理编码为最近的地址。
- 获取该地址的地点。
在第 1 步中使用 geocoder.geocode()
是可以的,但您需要注意接收的结果:如果第一个结果是公交车站,则它的地址不会是有用。
你最好使用 Radar Search ,搜索距原始纬度/经度输入最近的位置。这还避免了反向地理编码将用户位置捕捉到不太近的地址可能产生的问题。然后您需要发出一些Details请求获取最近的 N 个地点的名称(和其他详细信息)。
在步骤 2 中使用自动完成功能效果不佳。自动完成具有多个地点的地址很少会列出所有地点。
此外:不要手动触发 place_changed
,这不是它的工作原理。
place_changed
事件由 Autocomplete 触发仅在制作 PlaceResult 后才上课可用的。如果用户从自动完成预测中选择了地点,则需要调用地点详细信息服务,以检索您实际想要获取的详细信息。
This event is fired when a PlaceResult is made available for a Place the user has selected. If the user enters the name of a Place that was not suggested by the control and presses the Enter key, or if a Place detail request fails, a place_changed event will be fired that contains the user input in the name property, with no other properties defined.
如果您手动触发 place_changed
,则没有为您准备好的 PlaceResult
,这就是为什么 autocomplete.getPlace()
只会返回未定义
。
关于javascript - 手动触发时,自动完成的 Google API getPlace 返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39856333/