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

Javascript 谷歌地图自动完成反弹回已经清除的文本…奇怪…奇怪…奇怪,javascript,api,google-maps,google-maps-api-3,autocomplete,Javascript,Api,Google Maps,Google Maps Api 3,Autocomplete,我在谷歌地图自动完成中有这种奇怪的行为(或者我错过了一些东西)。。。思想?奇怪的是: 你在输入中输入某物,例如“伦敦” 按[回车] 你按下[清除]按钮 你点击“输入” 您在“输入”外部单击 。。。。。。。瞧!步骤3中已清除的文本(在我们的示例中为“伦敦”)正好返回到输入中…为什么 代码如下: <!DOCTYPE html> <html> <head> <script type="text/javascript" src="http://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>
    
    
    我的表格
    var myInput=document.getElementById('myInput');
    var autocomplete=new google.maps.places.autocomplete(myInput);
    函数clearInput(){
    myInput.value='';
    }
    myInput.addEventListener('change',function()){
    日志(事件['target']['value']);
    },假);
    
    回答“为什么”很复杂,因为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');
    }
    

    您可以发送错误报告,这不是预期的行为,应予以纠正。

    状态更新:错误报告已发布到Google Maps APIv3团队(自动完成问题)。。。回复后我会更新。初步测试表明,此解决方案解决了该问题。谢谢@user3126121你能给我一个错误报告的链接吗?