谷歌地图自动完成弹回已经清除的文本...奇怪....奇怪...奇怪

时间:2014-02-07 01:45:24

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

我有这种奇怪的行为来自谷歌MAPs自动完成(或者我想念......)...想法?奇怪的是:

  1. 您输入输入,例如'伦敦'
  2. 按[ENTER]
  3. 按[CLEAR]按钮
  4. 您点击“输入”
  5. 点击“输入”
  6. 外部

    .......瞧!在第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>
    

1 个答案:

答案 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');
}

您可以发送错误报告,这不是预期的行为,应该修复。