Autocomplete can';t点击手机上谷歌自动完成列表中的项目

Autocomplete can';t点击手机上谷歌自动完成列表中的项目,autocomplete,cordova,Autocomplete,Cordova,我正在使用Phonegap和HTML制作一个移动应用程序。现在我正在使用谷歌地图/地点自动完成功能。问题是:如果我在我的电脑上的浏览器中运行它,一切正常,并且我从自动完成列表中选择了一个要使用的建议-如果我在手机上部署它,我仍然会收到建议,但我无法点击一个。似乎“建议覆盖”被忽略了,我可以点击页面。有没有可能把重点放在建议列表上或其他类似的地方? 希望有人能帮助我。提前谢谢。我也有同样的问题, 我意识到问题是pac容器的focusout事件可能发生在pac项的tap事件之前(仅在phonegap

我正在使用Phonegap和HTML制作一个移动应用程序。现在我正在使用谷歌地图/地点自动完成功能。问题是:如果我在我的电脑上的浏览器中运行它,一切正常,并且我从自动完成列表中选择了一个要使用的建议-如果我在手机上部署它,我仍然会收到建议,但我无法点击一个。似乎“建议覆盖”被忽略了,我可以点击页面。有没有可能把重点放在建议列表上或其他类似的地方?
希望有人能帮助我。提前谢谢。

我也有同样的问题, 我意识到问题是pac容器的focusout事件可能发生在pac项的tap事件之前(仅在phonegap内置浏览器中)

我能解决这个问题的唯一方法是在输入被聚焦时向其添加padding bottom,并更改pac容器的top属性,以便pac容器位于输入的边界内

因此,当用户单击列表中的项时,不会触发focusout事件


它很脏,但能用

这个回复可能太晚了。但可能对其他人有帮助

我也有同样的问题,在调试了几个小时后,我发现这个问题是因为添加了“FastClick”库。去掉这个后,它照常工作

因此,对于fastClick和google建议,我在geo autocomplete中添加了这段代码

jQuery.fn.addGeoComplete = function(e){
    var input = this;
    $(input).attr("autocomplete" , "off");
    var id = input.attr("id");
    $(input).on("keypress", function(e){
        var input = this;
        var defaultBounds = new google.maps.LatLngBounds(
          new google.maps.LatLng(37.2555, -121.9245),
          new google.maps.LatLng(37.2555, -121.9245));

        var options = {
            bounds: defaultBounds,
            mapkey: "xxx"
        };

        //Fix for fastclick issue
        var g_autocomplete = $("body > .pac-container").filter(":visible");
        g_autocomplete.bind('DOMNodeInserted DOMNodeRemoved', function(event) {
            $(".pac-item", this).addClass("needsclick");
        });
        //End of fix

        autocomplete = new google.maps.places.Autocomplete(document.getElementById(id), options);
         google.maps.event.addListener(autocomplete, 'place_changed', function() {
             //Handle place selection
         });
    });
}

确实与FastClick和PAC存在冲突。我发现我需要将needsclick类添加到pac项目及其所有子项中

$(document).on({
    'DOMNodeInserted': function() {
        $('.pac-item, .pac-item span', this).addClass('needsclick');
    }
}, '.pac-container');
github上目前有一个,但尚未合并

但是,您可以简单地使用fastclick

该补丁添加了
excludeNode
选项,您可以通过regex排除fastclick处理的DOM节点。这就是我如何使用它使google autocomplete与fastclick一起工作的:

FastClick.attach(document.body, {
  excludeNode: '^pac-'
});

如果您使用的是Framework7,它有一个自定义的FastClicks实现。F7没有使用
needsclick
类,而是使用
no fastclick
。下面的功能是如何在F7中实现的:

 function targetNeedsFastClick(el) {
   var $el = $(el);
   if (el.nodeName.toLowerCase() === 'input' && el.type === 'file') return false;
   if ($el.hasClass('no-fastclick') || $el.parents('.no-fastclick').length > 0) return false;
   return true;
 }

因此,正如其他评论中所建议的,您只需将
添加到
.no fastclick
类即可。pac项目
及其所有子项

对我来说非常有效:

$(document).on({
    'DOMNodeInserted': function() {
        $('.pac-item, .pac-item span', this).addClass('needsclick');
    }
}, '.pac-container');

配置:Cordova/iOS iphone 5

没有人有解决方案?pac容器或pac项上的Z索引无法正常工作。+1!Z索引解决方案对我不起作用。FastClick是我的罪魁祸首。非常感谢!我已将我的原始问题中的此评论链接到任何其他有此问题的人。@saravanan您有非jquery解决方案吗?此解决方案使用一个功能;此外,它可能会导致性能问题。这对我不起作用。在我的代码中,我看到类needsclick被添加到所有对象中,但问题仍然存在。当我为自己工作时,什么也不会发生。谢谢谢谢你救了我一天。工作得很好。天啊。。。我爱你!Adam,你能更好地解释一下你的解决方案是如何工作的吗?这是迄今为止最好的答案,我不知道为什么它没有得到太多的评价…非常感谢你,我修复了这个$(文档);你应该得到很多类似的东西。:)