5

我使用谷歌地圖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>

該腳本將刪除監聽到Automplete的。 偵聽器接受一個參數。如果您只想刪除自動填充功能,請將其設置爲true。否則,輸入將被完全刪除。

+0

感謝您的完整答案。請解釋下列方法有什麼區別:'clearInstanceListeners','clearListeners'和'removeListener'。我應該使用它們全部還是我使用'clearInstanceListeners'就足夠了? – Erik 2015-02-11 20:14:36

+0

'removeListener'移除特定的偵聽器,'clearListeners'從給定對象中移除特定事件的所有偵聽器,'clearInstanceListeners'從給定對象中移除所有偵聽器(不管事件類型)。這足以使用'clearInstanceListeners' – 2015-02-11 22:37:30

+0

感謝您的幫助! – Erik 2015-02-12 15:19:46

相關問題