谷歌地图放置自动完成加载事件

Posted

技术标签:

【中文标题】谷歌地图放置自动完成加载事件【英文标题】:Google maps places autocomplete loading events 【发布时间】:2014-08-04 19:35:36 【问题描述】:

我正在使用Google Maps Places Autocomplete api。

我想在搜索过程中显示一个 Ajax 微调器,然后显示自动完成下拉菜单。

如何确定地点结果何时准备就绪?是否触发了一些事件?

这在互联网连接不佳时特别有用,因为延迟有时可能长达 5 秒。用户需要知道搜索框是一个自动完成的输入框,然后再疯狂地按回车进行搜索。

【问题讨论】:

您是否尝试过编写自己的控件而不是使用地理编码器服务自动完成?在键上(说一秒钟后进行地理编码,显示您的微调器,然后在地理编码完成时隐藏微调器并显示带有一些结果选项的列表。 @loangburger 我确实尝试过,自动完成功能稍微精简了一点,因为每个查询和选定的项目只会进行 1 个 http 调用。如果您使用 api 的 google 已公开,则需要不止一次调用来复制 api 提供的内容(包括有关您选择的坐标和信息)。 Google 也不会尽可能多地阻止您的请求。 嘿,回车搜索也是一个有效的操作,如果谷歌地图让我们这样做,你为什么不让你的用户这样做呢?看看这个demo,它也能做到:google-developers.appspot.com/maps/documentation/utils/geocoder 【参考方案1】:

您可以使用自动完成服务来获取查询预测。它有一个回调函数。

在您提供的链接的示例中,您可以将 input 声明为脚本中的全局变量。并在 initialize 函数之后使用 autocomplete 服务 访问它:

var input;
function initialize () 
  ...
  input = document.getElementById('pac-input');
  ...


function showSpinner() 
  document.getElementById('spinner').style.display = 'block';

  var service = new google.maps.places.AutocompleteService();
  service.getQueryPredictions( input: input , callback);


function callback(predictions, status) 
  if (status != google.maps.places.PlacesServiceStatus.OK) 
    document.getElementById('spinner').style.display = 'none';
    return;
  

至于html文档的改动:

  <body>
    <input id="pac-input" class="controls" type="text"
        placeholder="Enter a location" onkeypress="showSpinner()">
    <img id="spinner" src="spinner.gif" style="position:absolute; top:0; right:0; width: 250px; display: none">
  </body>

我只会在超时一秒(即如果用户的互联网连接很慢)时运行它,否则微调器看起来像一个潜意识图像。

【讨论】:

以上是关于谷歌地图放置自动完成加载事件的主要内容,如果未能解决你的问题,请参考以下文章

使用咖啡脚本自动完成放置后无法从 getPlace 获取价值

谷歌地图和谷歌位置自动完成冲突

谷歌地图自动完成动态数组

如果用户在Google地图自动填充中选择地址,则忽略模糊事件

谷歌放置自动完成限制类型和隐藏键

如何打开和关闭谷歌地图自动完成功能?