5

Io uso GoogleMap v3 AutoComplete e ho bisogno di rimuoverlo completamente e separare tutti i listener di eventi. Il mio codice per l'inizializzazione e vincolante per gli eventi sia simile alla seguente:Qual è il modo corretto per rimuovere completamente il completamento automatico di Google Maps?

var autocomplete = new google.maps.places.Autocomplete($("input").get(0), { 
    types: ["geocode"] 
}); 

google.maps.event.addListener(autocomplete, 'place_changed', function() { 
    // handle events 
}); 

non trovo modo ufficiale per rimuovere in modo corretto completamento automatico e separare tutti gli eventi. Per favore indicami la strada giusta.

Grazie.

risposta

8

Per lo slegamento degli eventi utilizzare google.maps.event.clearInstanceListeners.

Per la rimozione della funzionalità di completamento automatico non è disponibile alcun metodo. È possibile creare un clone dell'input prima di creare l'Automplete e quando si desidera rimuovere la funzionalità di completamento automatico sostituire l'attuale input con il clone.

//-------------------------------------------------------------- 
 
     //this overides the built-in Autocomplete and adds a remove-listener 
 
     //execute it once when the API has been loaded 
 
    (function(ac) { 
 
     google.maps.places.Autocomplete = function(node, opts) { 
 
      var clone = node.cloneNode(true), 
 
      pac = new ac(node, opts); 
 

 
      google.maps.event 
 
      .addListener(pac, 
 
       'remove', 
 
       function(restore) { 
 
        google.maps.event.clearInstanceListeners(pac); 
 
        google.maps.event.trigger(node,'blur'); 
 
        google.maps.event.clearInstanceListeners(node); 
 
       if (restore===true) { 
 
        node.parentNode.replaceChild(clone, node); 
 
       } else { 
 
        node.parentNode.removeChild(node) 
 
       } 
 
       }); 
 
      return pac; 
 

 
     } 
 
     } 
 
     (google.maps.places.Autocomplete)); 
 
//-------------------------------------------------------------------------- 
 

 
    function initialize() { 
 

 
     autocomplete = new google.maps.places 
 
     .Autocomplete(document.getElementsByTagName('INPUT')[0], { 
 
      types: ["geocode"] 
 
     }); 
 
    } 
 

 
    google.maps.event.addDomListener(window, 'load', initialize);
<script src="https://maps.googleapis.com/maps/api/js?v=3&libraries=places&.js"></script> 
 
<input/> 
 
<span> 
 
    <input type="button" value="remove input" 
 
      onclick="google.maps.event.trigger(window.autocomplete,'remove'); 
 
        this.parentNode.parentNode.removeChild(this.parentNode);"/> 
 
    <input type="button" value="remove autocomplete-functionality" 
 
      onclick="google.maps.event.trigger(window.autocomplete,'remove',true); 
 
        this.parentNode.parentNode.removeChild(this.parentNode);"/> 
 
<span>

Lo script aggiunge una Remove-ascoltatore a Automplete di. Il listener accetta un singolo argomento. Impostalo su true quando si desidera rimuovere solo la funzionalità di completamento automatico. Altrimenti l'input verrà rimosso completamente.

+0

Grazie per la risposta completa. Si prega di spiegare quale è la differenza nei metodi seguenti: 'clearInstanceListeners',' clearListeners' e 'removeListener'. Dovrei usarli tutti o l'uso di 'clearInstanceListeners' è sufficiente? – Erik

+0

'removeListener' rimuove un particolare listener,' clearListeners' rimuove tutti i listener di un determinato evento da un determinato oggetto, 'clearInstanceListeners' rimuove tutti gli ascoltatori (indipendentemente dal tipo di evento) da un determinato oggetto. È sufficiente usare 'clearInstanceListeners' –

+0

Grazie per l'aiuto! – Erik

Problemi correlati