谷歌地图自动完成,修复输入

Posted

技术标签:

【中文标题】谷歌地图自动完成,修复输入【英文标题】:Google maps autocomplete, fix to the input 【发布时间】:2017-03-01 18:52:56 【问题描述】:

我正在尝试将谷歌地图自动完成输入添加到我的 ionic 应用程序中。它工作得很好,除非我滚动。如图所示:

所以我尝试了不同的方法,例如更改 .pac-container 的位置,但并没有解决问题。 当我检查页面时,结果容器似乎在页面末尾加载,因此很难让块粘在输入栏上。

我已经到处搜索了,没有找到合适的解决方案?有人知道怎么做吗? (其实就是这么简单的代码:

    function initialize() 
            var options = componentRestrictions: country: 'uk', types: ['geocode']
        new google.maps.places.Autocomplete(
        (document.getElementById('autocomplete')), options);
    
    
    initialize();

jsfiddle

谢谢

【问题讨论】:

我无法在您的小提琴上重现自动完成框在滚动时看起来很好,您遇到过哪个浏览器这个问题? 嗨,这是一个更新的:jsfiddle.net/GVdK6/268 我在每个浏览器上都遇到了问题(我的 android 也是如此)。 嗨,有什么想法吗? :) @RobinFrcd 我看到你已经对答案投了赞成票,你介意用更具体的例子更新你的答案吗?纠结这个很久了.. 【参考方案1】:

就我而言,我必须将 css 设置为 html,bodyoverflow-x:visible; 以使 pac-container 固定到输入字段。

【讨论】:

【参考方案2】:

由于我的输入字段在“ion-content”内,我实现了Nicolas Pennesi 用 ion-content 的方法回答:

onScroll($event) 
// his code here

【讨论】:

【参考方案3】:

我得到了解决方案检查the example滚动时位置错误没有问题

function initAutocomplete() 
      //....codes...
       //....add this code just before close function...
    setTimeout(function() 
                $(".pac-container").prependTo("#mapMoveHere");
            , 300);

https://codepen.io/gmkhussain/pen/qPpryg

【讨论】:

【参考方案4】:

我刚刚在可滚动模式内的表单上实现自动完成时遇到了同样的问题。如果您只有一个 Autocomplete 对象,那么解决方案相对简单。

    首先确保元素的父元素具有相对位置。

    然后您需要选择 .pac-container 并将其附加到父级。

    $("#autocomplete").parent()
        .css(position: "relative")
        .append(".pac-container");
    

    最后将 .pac-container 的左侧和顶部位置设置为低于您的元素。这需要在带有 !important 声明的样式表中完成,以确保它 overrides 是 Google 代码设置的内联样式。

    // these values will need to be calculated based on your layout
    .pac-container 
        top: 40px !important;
        left: 0px !important;
    
    

如果您在单个页面上有多个自动完成对象,这显然不起作用。幸运的是,我找到了一种处理这种情况的方法,并在最近将其发布在 jQuery plugin 中,旨在让自动完成地址变得轻而易举。

【讨论】:

【参考方案5】:

我也有同样的问题。我的解决方案是:

$('#inputContainer').scroll(function()
    //Set new top to autocomplete dropdown
    newTop = $('#autocompleteInput').offset().top + $('#autocompleteInput').outerHeight();
    $('.pac-container').css('top', newTop + 'px');
  
);

这会在容器滚动时更新下拉位置。

【讨论】:

【参考方案6】:

我现在能够重现该问题,解决方案只需将 position: relative 添加到您的包装器 boxposition: absolute 到您的 #autocomplete 输入。

我得到了 Google 团队提供的解决方案检查 the example。

我已更新 your fiddle 以匹配解决方案,但它是这样的:

您更新后的 CSS:

.box 
  position: relative;
  height: 200vh;


#autocomplete 
    width:350px;
    position: absolute;

【讨论】:

您好,感谢您的回答,但是当我向 div 添加滚动时,问题就出现了:jsfiddle.net/GVdK6/272 似乎是因为div结果在HTML末尾弹出,与输入无关。我尝试了一些 DOM 修改,但我认为这不是解决方案。 ://

以上是关于谷歌地图自动完成,修复输入的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 jQuery Mobile 自动完成谷歌地图

Angular 谷歌地图 (AGM) 自动完成

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

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

谷歌地图自动完成:只输出地址,没有国家和城市