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

Come lo rimuovo ora?Non è possibile rimuovere il completamento automatico di Google Places?

C'è la funzione "autocomplete.unbindAll()" ma non rimuove l'HTML per la casella a discesa. Ho una pagina che fa un sacco di cose ajaxy e grazie a questo menu a tendina continuano ad essere aggiunte anche se c'è un solo completamento automatico in un dato momento nella pagina: |

+0

a cosa si riferisce "input"? lo hai definito come variabile, ad esempio 'var input = (document.getElementById (' zipcode '));'? –

+0

ovviamente. è un elemento html – thelolcat

+0

puoi fornire un po 'di violino o plunker –

risposta

7

assumendo questo è come le cose sono state inizializzate

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

Maps Google API forniscono anche removeListener e clearInstanceListeners per la rimozione pure. https://developers.google.com/maps/documentation/javascript/reference#event

anche come un passo opzionale, è necessario rimuovere questo $ ("pac-contenitore"), così

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

Ciò non aiuta quando si hanno più autocompleti su una pagina, poiché tutti i' pac-container's verranno rimossi quando vuoi rimuovere solo uno di loro. – Senthe

1

Ovunque si chiami ora autocomplete.unbindAll() invece (anche?) Chiama input.parentNode.removeChild(input)? Questo è essenzialmente ciò che succede nell'eccellente risposta a What is the correct way to completely remove GoogleMaps Autocomplete?

Tuttavia, a differenza di questa domanda, si lamenta di "più caselle a discesa".

Sembra che il tuo vero problema è che si sta invocando new google.maps.places.Autocomplete(...)più di una volta, contro diversi input nodi. Non puoi evitarlo? Dove stai 'creando' un nuovo nodo, basta tirare il nodo 'inizializzato' nella posizione nel documento in cui si desidera utilizzarlo ora, usando l'API DOM JS. Nascondilo se lo vuoi temporaneamente fuori dalla vista.

Sembra un po 'più difficile se si utilizza un framework di associazione, ma devi ottenere quella chiamata a new Autocomplete da qualsiasi cosa stia facendo, in qualche modo.

2

Anche se è un vecchio post, vorrei rispondere ora come aiuterebbe qualcuno

Rimuovere i listener o unbindall() sull'istanza di completamento automatico non rimuoverà i suggerimenti automatici e la rimozione del ".pac-container" da DOM non è la soluzione pulita.

La nuova istanza di completamento automatico indica che l'elemento di input è agganciato all'istanza di completamento automatico e pertanto è necessario cancellare i listener per l'elemento di input e non l'istanza di completamento automatico.

google.maps.event.clearInstanceListeners (input);

Problemi correlati