2015-10-10 6 views
6
var autocomplete = new google.maps.places.Autocomplete(input, { 
    types: ['geocode'] 
}); 

Как его удалить сейчас?У вас нет возможности удалить автозаполнение google?

Есть функция autocomplete.unbindAll(), но она не удаляет HTML для раскрывающегося списка. У меня есть страница, которая делает много вещей ajaxy и из-за того, что эти выпадающие окна продолжают добавляться, даже если в данный момент на странице есть только один автозаполнение: |

+0

что такое «ввод»? вы определили его как переменную, например «var input = (document.getElementById (« zipcode »)); –

+0

конечно. это элемент html – thelolcat

+0

вы можете предоставить какую-нибудь скрипку или плункер. –

ответ

7

Предполагая, что это, как все отформатирован

var autocomplete = new google.maps.places.Autocomplete(input, {types: ['geocode']}); 
var autocompleteLsr = google.maps.event.addListener(autocomplete, 'place_changed', function() { ... }); 

API Карт Google также обеспечивает и clearInstanceListeners удаления слушателя для удаления, а также. https://developers.google.com/maps/documentation/javascript/reference#event

также в качестве дополнительного шага, вы должны удалить это $ («Pac-контейнер»), а также

google.maps.event.removeListener(autocompleteLsr); 
google.maps.event.clearInstanceListeners(autocomplete); 
$(".pac-container").remove(); 
+0

Это не помогает, когда у вас есть несколько автозаполнений на одной странице, поскольку все' pac-container 'будут удалены, когда вы хотите удалить только один из них. – Senthe

1

Куда вы сейчас звоните autocomplete.unbindAll() (также?) Позвонить input.parentNode.removeChild(input)? Это, по сути, то, что продолжается в отличном ответе на What is the correct way to completely remove GoogleMaps Autocomplete?

Однако, в отличие от этого вопроса, вы жалуетесь на «множественные выпадающие окна».

Похоже, ваш реальной проблемой является то, что вы вызываете new google.maps.places.Autocomplete(...)более чем один раз, против различных input узлов. Разве вы не можете этого избежать? Если вы создаете новый узел, просто переместите «инициализированный» узел в место в документе, где вы хотите его использовать, используя API-интерфейс JS DOM. Спрячьте его, если вы хотите, чтобы он скрылся из виду временно.

Это выглядит немного сложнее, если вы используете инфраструктуру привязки, но вы должны получить этот звонок до new Autocomplete из того, что он делает, так или иначе.

2

Несмотря на то, что это старый пост, я хотел бы ответить на него сейчас, как это поможет кому-то.

Извлечение слушателей или unbindall() на экземпляр автозаполнения не приведет к удалению автопредложений, и удаление «.pac-container» из DOM не является чистым решением.

Новый экземпляр автозаполнения означает, что входной элемент подключен к экземпляру автозаполнения, поэтому нам нужно очистить слушатели от входного элемента, а не от экземпляра автозаполнения.

google.maps.event.clearInstanceListeners (input);

Смежные вопросы