这是我的问题:我正在使用Google Places Autocomplete从用户那里收集关于地点的信息。
在事件"place_changed“中,我保存了这个信息。然而,我想给用户添加多个地方的可能性。所以在这个地方被保存之后,我想要清除输入。
但是,Google Autocomplete会自动替换输入字段中的最后一项。不管怎么说,要摆脱它?
详细信息:
var inputDiv = $('#myinput');
var options = {
types: ['(cities)']
};
var autocomplete = new google.maps.places.Autocomplete(inputDiv[0], options);
google.maps.event.addListener(autocomplete, 'place_changed', function() {
var places = autocomplete.getPlace();
savePlaces(places);
console.log(inputDiv.val()); // 'Paris, France'
inputDiv.val('');
console.log(inputDiv.val()); // (an empty string)
setTimeout(function() {
console.log(inputDiv.val()); // 'Paris, France' (It's back!)
inputDiv.val('');
console.log(inputDiv.val()); // (an empty string)
}, 1);
setTimeout(function() {
console.log(inputDiv.val()); // (an empty string)
}, 10);
}
你会告诉我,这看起来很好,只要在超时时清除它。但是当我离开输入的时候(它失去了焦点)。最后一个条目又回来了!
有什么办法解决这个问题吗?我还没有在Google文档中找到像这样的函数
autocomplete.clear();
谢谢!
发布于 2013-01-18 09:42:45
看起来autocomplete在内部监听输入的blur-event,所以让我们给它一些东西来监听,并在那之后清除字段:
inputId_div.blur();
setTimeout(function(){
inputId_div.val('')
inputId_div.focus();},10);
发布于 2016-07-06 18:17:28
要清除您可以使用的位置:
autocomplete.set('place',null);
它还会触发place_change事件。
发布于 2013-11-15 07:28:43
前一项保留在autocomplete对象中。
解决方案:清除输入框,然后创建一个新的自动完成对象。还要确保删除以前的事件侦听器。
声明:
var input = document.getElementById('autocomplete');
var autocomplete;
var autocompleteListener;
var onPlaceChange = function() {...};
var initAutocomplete = function() {
autocomplete = new google.maps.places.Autocomplete(input);
autocompleteListener = google.maps.event.addListener(autocomplete, 'place_changed', onPlaceChange);
};
要清除,请执行以下操作:
input.value = "";
google.maps.event.removeListener(autocompleteListener);
initAutocomplete();
前一个自动完成对象应该是垃圾回收的。如果我说错了,请纠正我。要确保暴露内存泄漏,可以手动将其删除。
https://stackoverflow.com/questions/14384004
复制相似问题