【问题标题】:What is the correct way to completely remove GoogleMaps Autocomplete?完全删除 GoogleMaps Autocomplete 的正确方法是什么?
【发布时间】:2015-04-11 03:05:20
【问题描述】:

我使用 GoogleMap v3 AutoComplete,我需要完全删除它并取消绑定所有事件侦听器。我用于初始化和绑定事件的代码如下所示:

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

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

我没有找到正确删除自动完成和取消绑定所有事件的官方方法。请指出正确的方法。

谢谢。

【问题讨论】:

    标签: javascript google-maps google-maps-api-3 google-maps-api-2


    【解决方案1】:

    要取消绑定事件,请使用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>

    该脚本将删除侦听器添加到 Automplete 的。 侦听器接受单个参数。当您只想删除自动完成功能时,请将其设置为 true。否则输入将被完全删除。

    【讨论】:

    • 感谢您的完整回答。请解释以下方法的区别:clearInstanceListenersclearListenersremoveListener。我应该全部使用还是使用clearInstanceListeners 就足够了?
    • removeListener 删除特定的侦听器,clearListeners 从给定对象中删除特定事件的所有侦听器,clearInstanceListeners 从给定对象中删除所有侦听器(无论事件类型如何)。使用clearInstanceListeners就足够了
    猜你喜欢
    • 2013-10-16
    • 2019-06-11
    • 2012-01-16
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多