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

Tôi làm cách nào để xóa ngay bây giờ?Không có cách nào để xóa tự động điền địa điểm của Google?

Có chức năng "autocomplete.unbindAll()" nhưng không xóa HTML cho hộp thả xuống. Tôi có một trang mà làm rất nhiều thứ ajaxy và vì hộp thả xuống này tiếp tục được thêm ngay cả tho chỉ có một autocomplete tại một thời điểm nhất định trên trang: |

+0

'đầu vào' đề cập đến là gì? bạn đã định nghĩa nó như là một biến, ví dụ 'var input = (document.getElementById (' zipcode '));'? –

+0

tất nhiên. nó là một phần tử html – thelolcat

+0

bạn có thể cung cấp một số fiddle hoặc plunker –

Trả lời

7

Giả sử đây là cách mọi thứ đã được khởi

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

bản đồ google API cũng cung cấp removeListener và clearInstanceListeners để loại bỏ là tốt. https://developers.google.com/maps/documentation/javascript/reference#event

cũng như một bước không bắt buộc, bạn nên loại bỏ $ này ("pac-container") cũng

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

Điều đó không giúp ích gì khi bạn có nhiều lần tự động hoàn thành trên một trang vì tất cả' pac-container's sẽ bị xóa khi bạn chỉ muốn xóa một trong số chúng. – Senthe

1

Bất cứ nơi nào bạn hiện đang gọi autocomplete.unbindAll() thay vì (cũng?) Hãy gọi input.parentNode.removeChild(input)? Đó là những gì diễn ra trong câu trả lời tuyệt vời cho What is the correct way to completely remove GoogleMaps Autocomplete?

Tuy nhiên, không giống như câu hỏi đó, bạn phàn nàn về 'nhiều hộp thả xuống'.

Nó có vẻ như thực vấn đề của bạn là bạn đang gọi new google.maps.places.Autocomplete(...)nhiều hơn một lần, chống lại khác nhau input nút. Bạn không thể tránh điều đó sao? Khi bạn đang 'tạo' một nút mới, chỉ cần kéo nút 'được khởi tạo' đến vị trí trong tài liệu mà bạn muốn sử dụng nó ngay bây giờ, bằng cách sử dụng API JS DOM. Ẩn nó nếu bạn muốn nó ra khỏi tầm nhìn tạm thời.

Dường như khó khăn hơn một chút nếu bạn đang sử dụng khung công tác ràng buộc, nhưng bạn phải nhận cuộc gọi đó tới new Autocomplete trong bất kỳ điều gì nó đang thực hiện, bằng cách nào đó.

2

Mặc dù nó là một bài cũ, tôi muốn trả lời nó bây giờ vì nó sẽ giúp ai đó.

Xóa người nghe hoặc unbindall() trên cá thể tự động hoàn thành sẽ không xóa đề xuất tự động xảy ra và xóa ".pac-container" khỏi DOM không phải là giải pháp sạch.

Ví dụ mới về tự động hoàn thành có nghĩa là phần tử đầu vào được nối với cá thể tự động hoàn thành và vì vậy chúng tôi phải xóa người nghe đối với phần tử đầu vào chứ không phải cá thể tự động hoàn thành.

google.maps.event.clearInstanceListeners (input);

Các vấn đề liên quan