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

Jak mogę to teraz usunąć?Nie można usunąć autouzupełniania miejsc Google?

Istnieje funkcja "autocomplete.unbindAll()", ale nie usuwa ona kodu HTML w polu rozwijanym. Mam stronę, która robi dużo rzeczy z ajaxy iz tego powodu rozwijane są te pola, nawet jeśli w danej chwili na stronie jest tylko jedno autouzupełnianie: |

+0

co to jest "wejście"? czy zdefiniowałeś ją jako zmienną, na przykład "var input = (document.getElementById ('zipcode')); '? –

+0

oczywiście. to jest element html – thelolcat

+0

czy możesz dostarczyć trochę skrzypiec lub plunkera? –

Odpowiedz

7

Zakładając ten sposób rzeczy zostały zainicjowane

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

Google Maps API również removeListener i clearInstanceListeners do usuwania, jak również. https://developers.google.com/maps/documentation/javascript/reference#event

także jako opcjonalny krok, należy usunąć to $ („Pac-kontener”), jak również

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

To nie pomaga, gdy masz kilka autouzupełnień na jednej stronie, ponieważ wszystkie pakiety' pac-container's zostaną usunięte, gdy chcesz usunąć tylko jeden z nich. – Senthe

1

Gdziekolwiek teraz dzwonisz autocomplete.unbindAll() (również?) Zadzwoń pod numer input.parentNode.removeChild(input)? Zasadniczo dzieje się to w doskonałej odpowiedzi na What is the correct way to completely remove GoogleMaps Autocomplete?

Jednak w przeciwieństwie do tego pytania, użytkownik skarży się na "wiele list rozwijanych".

Wydaje się swoim rzeczywistym problemem jest to, że jesteś powołując new google.maps.places.Autocomplete(...)więcej niż jeden raz, przed różnymi input węzłów. Nie możesz tego uniknąć? Tam, gdzie "tworzysz" nowy węzeł, po prostu przeciągnij "zainicjowany" węzeł do miejsca w dokumencie, w którym chcesz go teraz użyć, używając interfejsu JS DOM API. Ukryj go, jeśli chcesz tymczasowo go nie widzieć.

To wydaje się nieco trudniejsze, jeśli używasz wiążącej ramy, ale musisz dostać to połączenie do new Autocomplete z tego co robi, jakoś.

2

Mimo to stary post, chciałbym odpowiedzieć na to pytanie teraz jak to pomogłoby komuś.

Usunięcie detektorów lub unbindall() na instancji autocomplete nie spowoduje usunięcia automatycznych sugestii i usunięcia ".pac-container" z DOM nie jest czystym rozwiązaniem.

Nowa instancja autouzupełniania oznacza, że ​​element wejściowy jest podpięty do instancji autouzupełniania, a więc musimy wyczyścić detektory elementu wejściowego, a nie instancji autouzupełniania.

google.maps.event.clearInstanceListeners (dane wejściowe);

Powiązane problemy