谷歌地图API地方自动完成getPlace()不起作用

Posted

技术标签:

【中文标题】谷歌地图API地方自动完成getPlace()不起作用【英文标题】:google maps api places autocomplete getPlace() not working 【发布时间】:2013-05-13 20:34:49 【问题描述】:

我对 google maps api 地方自动完成有问题。似乎函数getPlaces() 不像文档中描述的那样工作: Autocomplete

如果详细信息是,则返回用户选择的地点的详细信息 成功找回。否则返回一个存根 Place 对象,其中 name 属性设置为输入字段的当前值。

以如下代码为例:

<html>
<head>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3&sensor=false&libraries=places"></script>
    <script type="text/javascript">
    initialize = function () 
        var input = document.getElementById('locationsearch');
        var options = 
            types: ['(cities)']
        ;
        autocomplete = new google.maps.places.Autocomplete(input, options);
    
    google.maps.event.addDomListener(window, 'load', initialize);
    submitform = function () 
        searchplace = autocomplete.getPlace();
        console.log(searchplace.name);
    
    </script>
</head>
<body>
    <form onsubmit="submitform();return false;">
        <input type="text" id="locationsearch"/>
        <input type="button" value="search" onclick="submitform(); return false;"/>
    </form>
</body>
</html>

这个简单的代码在input="text" 元素中使用了自动完成功能,按下它旁边的按钮后,它应该在控制台中记录地名。 我遇到的问题是input 元素选择的位置不完整。我希望getPlace() 函数返回place 对象,其名称属性设置为input 元素的当前值。相反,控制台正在记录错误: Uncaught TypeError: Cannot read property 'name' of undefined.

我在使用地点自动完成时做错了什么,还是这个功能根本无法正常工作? 谢谢。

【问题讨论】:

请定义“选择的地点不完整” 当您在输入元素中写入几个字母并且您没有从自动完成列表中选择任何内容时。未选择位置,但输入元素也不为空。 文档描述了这种行为仅适​​用于在输入中按下回车键的情况。 这不是 3.14 的真实文档:“如果成功检索到详细信息,则返回用户选择的地方的详细信息。否则返回存根 Place 对象,名称属性设置为输入字段。”我有同样的问题。这需要通过获取连接输入字段的直接值来解决... 就是这样,我重建了整个autocomplete 函数以按预期工作。到目前为止,我没有找到任何其他解决方案。 【参考方案1】:

原因是 Google 使用了另一个标识符“locality”而不是通常的“name”。

因此,如果您使用 'place' 中的子元素 'locality',您可以获取该地点的名称。

代码:

 var val = place.address_components[0][componentForm['locality']];

Example

【讨论】:

以上是关于谷歌地图API地方自动完成getPlace()不起作用的主要内容,如果未能解决你的问题,请参考以下文章

查找谷歌地方自动完成时返回零结果

使用特定城市的谷歌地图 API 获取自动完成的地址

使用带有 select2 的谷歌地图自动完成 api

谷歌地方自动完成的样式不起作用

如何从谷歌地图自动完成 api 获取邮政编码

我的谷歌地图 api 密钥在 python 中不起作用,尽管它可以在 swift 中运行