Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检测Google Maps API自动完成列表中是否选择了该项?_Javascript_Jquery_Google Maps_Google Maps Api 3_Autocomplete - Fatal编程技术网

Javascript 如何检测Google Maps API自动完成列表中是否选择了该项?

Javascript 如何检测Google Maps API自动完成列表中是否选择了该项?,javascript,jquery,google-maps,google-maps-api-3,autocomplete,Javascript,Jquery,Google Maps,Google Maps Api 3,Autocomplete,我正在努力实现以下行为 使用Google Maps API的自动完成功能时,用鼠标单击列表中的某个元素或按enter键将选择所需的元素并用必要的值填充输入。但是,如果在焦点仍在输入元素本身时按enter键,则不会发生任何事情,因此有必要以某种方式解决该问题 我已决定通过从自动完成列表中选择第一项来解决该问题: $("#autocomplete").keypress(function(e){ if(e.which == 13) { select-first-item(); } })

我正在努力实现以下行为

使用Google Maps API的自动完成功能时,用鼠标单击列表中的某个元素或按enter键将选择所需的元素并用必要的值填充输入。但是,如果在焦点仍在输入元素本身时按enter键,则不会发生任何事情,因此有必要以某种方式解决该问题

我已决定通过从自动完成列表中选择第一项来解决该问题:

$("#autocomplete").keypress(function(e){
  if(e.which == 13) {
    select-first-item();
  }
});
它工作得很好,但问题是,即使您使用键盘上的向下箭头,浏览自动完成列表,然后在e时按enter键,它也会选择第一项。G选择第四个结果

如何解决这个问题?我试过使用
:focus
,但它似乎不太可靠。有时选择第一个结果,有时从列表中选择重点项目

Google Maps将class
pac item selected
添加到列表中所选的项目中,因此我上次的尝试是基于检查
length

$("#autocomplete").keypress(function(e){
  if ( $( ".pac-item-selected" ).length ) {
    if(e.which == 13) {
      select-first-item();
    }
  }
}
但是,只要你按下任何键,类就会离开,检查长度也不起作用。如果我使用event.preventDefault,整个功能就不起作用了,因为自动完成显然是基于keypress/keydown/。。。事件

我无法使地图在我的小提琴中正常工作,因此我改编了一把旧小提琴:


有什么解决方法吗?

使用地点更改自动完成事件,您可以检查地点是否已更改:

var input_source = document.getElementById('input_source');
var autocomplete = new google.maps.places.Autocomplete(input_source);
google.maps.event.addListener(autocomplete, 'place_changed', function() {
         // process
    });  

除了@dhara paramar解决方案外:

只是想根据Google Maps Api Documantation添加新的较短版本:

var input_source = document.getElementById('input_source');
var autocomplete = new google.maps.places.Autocomplete(input_source);

autocomplete.addListener('place_changed', fillInAddress);

function fillInAddress() {
    //your process here
};

我使用place_changed,但用于生成自动完成列表和填充位置数据(geometry.location)。我想,这有什么用呢。E当列表中有聚焦/选中的项目时,如何区分输入笔划和完全没有列表时输入笔划?你能用我提供的fiddle实现你的解决方案吗?place_changed是Maps API用来检测输入元素变化的监听器。当用户输入时,将触发place_changed。在我的情况下,这一切都正常工作,我使用的代码与您提供的相同。请检查提供的小提琴。问题是,当用户按enter键时,我无法区分自动完成列表(使用“选择了pac项目”类)中是否选择了元素。是否要获取选定位置的最近长度?