我有这种奇怪的行为来自谷歌MAPs自动完成(或者我想念......)...想法?奇怪的是:
.......瞧!在第3步中已经清除的文本(在我们的示例中为“伦敦”)是右回到输入中......为什么?
以下是代码:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=places"></script>
</head>
<body>
<h1>MY FORM</h1>
<input type='text' id='myInput' size='50' placeholder='Enter text'>
<input type='button' value='clear' onclick='clearInput()'>
<script>
var myInput = document.getElementById('myInput');
var autocomplete = new google.maps.places.Autocomplete(myInput);
function clearInput(){
myInput.value = '';
}
myInput.addEventListener('change', function(){
console.log(event['target']['value']);
}, false);
</script>
</body>
</html>
答案 0 :(得分:3)
回答“为什么”这么复杂,因为API源的来源是压缩的,很难说那里到底发生了什么。
当然,输入的值必须存储在某处,因为在某些情况下必须将其恢复(例如,当你在下拉列表的值之间切换时)。
基本上,自动完成功能正在侦听输入中的4个事件:
focus, keydown, keyup, blur
这些事件都不会在您的函数中触发,因此自动完成功能可能无法识别新值。
可能的解决方案:在您的函数中触发这些事件:
function clearInput(){
google.maps.event.trigger(myInput,'focus');
myInput.value = '';
google.maps.event.trigger(myInput,'keydown',{keyCode:46});
google.maps.event.trigger(myInput,'keyup',{keyCode:46});
google.maps.event.trigger(myInput,'blur');
}
您可以发送错误报告,这不是预期的行为,应该修复。