var autocomplete = new google.maps.places.Autocomplete(input, {
types: ['geocode']
});
如何立即将其删除?
有“autocomplete.unbindAll()”函数,但它不会删除下拉框的HTML。我有一个页面,它做了很多ajaxy的东西,因为这个下拉框仍然被添加,即使在页面上的给定时间只有一个自动完成:|
答案 0 :(得分:16)
假设这是事情的初始化方式
var autocomplete = new google.maps.places.Autocomplete(input, {types: ['geocode']});
var autocompleteLsr = google.maps.event.addListener(autocomplete, 'place_changed', function() { ... });
google maps API还提供removeListener和clearInstanceListeners以供删除。 https://developers.google.com/maps/documentation/javascript/reference#event
作为可选步骤,您应该删除此$(" .pac-container")以及
google.maps.event.removeListener(autocompleteLsr);
google.maps.event.clearInstanceListeners(autocomplete);
$(".pac-container").remove();
答案 1 :(得分:3)
虽然这是一篇旧帖子,但我现在想回答它,因为它可以帮助某人。
删除自动完成实例上的侦听器或unbindall()不会删除发生的自动建议,从DOM中删除“.pac-container”并不是一个干净的解决方案。
自动完成的新实例意味着输入元素与自动完成实例挂钩,因此我们必须清除输入元素的侦听器而不是自动完成实例。
google.maps.event.clearInstanceListeners(输入);
答案 2 :(得分:1)
无论您现在拨打factor
而不是(也是?),请致电autocomplete.unbindAll()
?这基本上是对What is the correct way to completely remove GoogleMaps Autocomplete?
然而,与该问题不同,您抱怨多个下拉框'。
您的真正的问题似乎是您针对不同的input.parentNode.removeChild(input)
节点不止一次地调用new google.maps.places.Autocomplete(...)
。你能避免吗?你在哪里创造'一个新的节点,只需拉出“初始化的”'现在,使用JS DOM API将节点定位到文档中要使用它的位置。如果您暂时想要它,请将其隐藏起来。
如果您正在使用绑定框架,这似乎有点困难,但是您必须以某种方式从它所做的任何事情中调用input
。
答案 3 :(得分:0)
我发现,当您使用$(".pac-container").remove();
时,直到您刷新或更改页面后,自动完成功能才会再次显示。因此,它不适用于SPA。我发现您可以使用它,并且效果很好:
autocomplete.addListener('place_changed', function () {
$('.pac-item').remove();
});
答案 4 :(得分:0)
隐藏Google自动填充下拉菜单建议
隐藏建议:
$(".pac-container").css("visibility", "hidden");
显示建议:
$(".pac-container").css("visibility", "visible");
要基于jquery事件触发隐藏或可见:
$("#location").on("keydown click keyup keypress blur change focus", function(){
if(!$('#geoAutocomplete').is(":checked")){
$(".pac-container").css("visibility", "hidden");
}else{
$(".pac-container").css("visibility", "visible");
}
});
注意:我有一个ID为geoAutocomplete的复选框,供用户打开和关闭自动完成功能。