Javascript 如何检测Google Maps API自动完成列表中是否选择了该项?
我正在努力实现以下行为 使用Google Maps API的自动完成功能时,用鼠标单击列表中的某个元素或按enter键将选择所需的元素并用必要的值填充输入。但是,如果在焦点仍在输入元素本身时按enter键,则不会发生任何事情,因此有必要以某种方式解决该问题 我已决定通过从自动完成列表中选择第一项来解决该问题: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(); } })
$("#autocomplete").keypress(function(e){
if(e.which == 13) {
select-first-item();
}
});
它工作得很好,但问题是,即使您使用键盘上的向下箭头,浏览自动完成列表,然后在e时按enter键,它也会选择第一项。G选择第四个结果
如何解决这个问题?我试过使用:focus
,但它似乎不太可靠。有时选择第一个结果,有时从列表中选择重点项目
Google Maps将classpac 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项目”类)中是否选择了元素。是否要获取选定位置的最近长度?