5

Я использую GoogleMap v3 AutoComplete, и мне нужно полностью удалить его и отменить все прослушиватели событий. Мой код для инициализации и привязки событий выглядит следующим образом:Каков правильный способ полностью удалить автозаполнение GoogleMaps?

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

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

Я не нахожу официальный способ правильно удалить автозаполнения и синхронизироваться все события. Пожалуйста, укажите мне правильный путь.

Спасибо.

ответ

8

Для развязывания мероприятий используется google.maps.event.clearInstanceListeners.

Для удаления функциональности автозаполнения отсутствует реализованный метод. Вы можете создать клон ввода, прежде чем создавать автозапуск, и когда вы хотите удалить функциональность автозаполнения, замените текущий вход на клонирование.

//-------------------------------------------------------------- 
 
     //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>

Скрипт добавляет REMOVE-слушателя Automplete годов. Слушатель принимает единственный аргумент. Установите его на true, когда вы хотите удалить функциональность автозаполнения. В противном случае вход будет полностью удален.

+0

Спасибо за полный ответ. Пожалуйста, объясните, в чем разница в следующих методах: 'clearInstanceListeners',' clearListeners' и 'removeListener'. Должен ли я использовать их все, или я использую 'clearInstanceListeners' достаточно? – Erik

+0

'removeListener' удаляет конкретный прослушиватель,' clearListeners' удаляет всех слушателей для определенного события из заданного объекта, 'clearInstanceListeners' удаляет всех слушателей (независимо от типа события) из заданного объекта. Достаточно использовать 'clearInstanceListeners' –

+0

Спасибо за помощь! – Erik

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

  • Нет связанных вопросов^_^