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

Javascript 如何打开和关闭谷歌地图自动完成功能?,javascript,google-maps,google-maps-api-3,autocomplete,Javascript,Google Maps,Google Maps Api 3,Autocomplete,我正在为Google Maps API(第3级)实例化一个自动完成输入,如下所示: var input = document.getElementById('szukanyAdres'); autocomplete = new google.maps.places.Autocomplete(input); autocomplete.bindTo('bounds', map); 如何在运行时打开和关闭自动完成功能?有两个元素与自动完成相关 输入元素 包含列表项的div。此div将被追加到主体中,

我正在为Google Maps API(第3级)实例化一个自动完成输入,如下所示:

var input = document.getElementById('szukanyAdres');
autocomplete = new google.maps.places.Autocomplete(input);
autocomplete.bindTo('bounds', map);

如何在运行时打开和关闭自动完成功能?

有两个元素与自动完成相关

  • 输入元素
  • 包含列表项的div。此div将被追加到主体中,并具有类“pac container”
  • 因此,您可以做什么:通过修改两个图元的显示样式来显示或隐藏它们


    当无法隐藏输入时,可以使用输入的克隆替换输入,这将删除自动完成功能

    inputObject.parentNode.replaceChild(inputObject.cloneNode(true),input);
    

    要恢复自动完成,请重新执行您想执行的操作。

    莫勒博士的解决方案对我不起作用

    我找到的解决方案是clearListener并删除pac容器:

    var autocomplete;
    var autocompleteListener;
    function disableGoogleAutocomplete() {
        if (autocomplete !== undefined) {
                google.maps.event.removeListener(autocompleteListener);
                google.maps.event.clearInstanceListeners(autocomplete);
                $(".pac-container").remove();
    
                console.log('disable autocomplete to GOOGLE');
         }
    }
    function enableGoogleAutocomplete() {
        autocomplete = new google.maps.places.Autocomplete($("#inputDiv input")[0], options);
        autocompleteListener = google.maps.event.addListener(autocomplete, 'place_changed', function() { ... }
        console.log('set autocomplete to GOOGLE');
    }
    

    现在我可以打开/关闭google places Autocomplete。

    删除添加到Autocomplete的所有侦听器

    autocomplete.unbindAll();
    

    删除添加到输入元素的所有侦听器

    google.maps.event.clearInstanceListeners(input);
    

    请参见

    如果此处所写内容对您不起作用,您可以尝试将其隐藏起来。
    键入时显示位置的字段位于css class.pac容器中,因此只需在css display:none中声明它。在搜索框中键入时,它将不会出现。实际上,这不是定制它的方法。

    您可以尝试使用JQuery隐藏它:

    $(".pac-container").hide(); //hide autocomplete
    

    我也面临着这个问题(在我的应用程序中,我只想在用户在我的输入字段中键入至少4位数字时运行google的自动完成功能——当键入的字符串少于4位时,我使用自定义智能搜索)

    在我的案例中,上述解决方案也不起作用,因此我的解决方法是:

  • 需要时,将不透明度:0设置为$('.pac container')
  • 如果需要,还可以选择设置低z索引

  • 我不明白,你不想在你的网站上使用自动完成?那么,为什么不删除代码呢?在上面添加了另一个建议您确定这在功能上禁用了自动完成功能吗?从视觉上看,它是有效的,但是当我注释掉$('.pac container').remove()时,侦听器/autocomplete仍然处于活动状态。是的,我使用它在Google maps autocomplete和我自己的数据之间切换。为什么在这里使用
    Google.maps.event.Removelister
    ?您使用的是
    google.maps.event.clearInstanceListeners
    ,这就足够了。我不记得为什么,但我认为使用这种方法不会禁用自动完成。需要测试。它并没有完全禁用它:按向上键和向下键仍然有事件。真糟糕,是的,谢谢!在多次输入失败的情况下,花了数小时尝试在GooglePlaces和另一个API之间切换,这实际上解决了问题。禁用Places后,我们的另一项服务显示建议,但尽管禁用了其他事件并隐藏了容器,但google仍通过使用建议填充输入来增强按键功能。这不会每次都起作用,因为google的javascript将再次显示,即使您将更改或删除DIV的类。