触发谷歌地点自动完成功能

14

我正在尝试将虚拟键盘附加到绑定到Google地点自动完成输入的功能上。

如果我在输入框中手动输入字母,基于地图中心的自动完成预测列表会显示下拉框。如果我点击虚拟键盘上的按键,输入框会正确更新,但自动完成预测列表不会更新。

我尝试使用虚拟键盘change回调触发"keyup"(stackoverflow结果)、"keypress"、"keydown"、"change"事件,甚至尝试了这个(demo):

change : function(e, keyboard, el) {
    google.maps.event.trigger(autocomplete, 'place_changed');
}

这通常会导致JavaScript错误,显示autocomplete.getPlace();没有返回结果。

因此,我现在尝试了下面的代码(在此演示中),它使用更改回调触发自动完成预测,但是您可以在该演示中看到结果不同。

change : function(e, keyboard, el) {
  var $el = $(el),
      service = new google.maps.places.AutocompleteService();
  if ($el.val() !== "") {
    service.getQueryPredictions({ input: $(el).val() }, function(predictions, status) {
      if (status != google.maps.places.PlacesServiceStatus.OK) {
        alert(status);
        return;
      }
      var list = '', $results = $('#results');
      for (var i = 0, prediction; prediction = predictions[i]; i++) {
        list += '<li>' + prediction.description + '</li>';
      }
      $results.html(list);
    });
  }
}

理想情况下,我希望在虚拟键盘上输入时,能够触发已经建立的自动完成预测下拉菜单更新。


这个回答解决了你的问题吗?如何避免需要终端用户手动启动Google Places自动完成下拉框? - Alex R
1个回答

11

我找到了答案(演示)!

change : function(e, keyboard, el) {
    google.maps.event.trigger( el, 'focus', {} );
}

兄弟,你最终花了数小时在谷歌的API中徘徊。非常感谢! - Alexandre Bourlier
1
你们解决了如何在我点击自动完成结果时触发更改的问题吗?我可以让“焦点”触发并显示结果,但现在当我点击结果时,它们不会消失。 - nf071590
@nf071590 我遇到了同样的问题,因为我使用了 usePreview: true,当我将其设置为 false 时,它就正常工作了。 - koceeng
除非您添加延迟,否则似乎无法正常工作,参见:https://dev59.com/0WLVa4cB1Zd3GeqPsQNQ?noredirect=1&lq=1 - Alex R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接