如何检测Google Maps API自动填充列表中是否选择了项目?

时间:2016-05-02 09:23:03

标签: 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();
  }
});

效果很好,但问题是,即使您使用键盘上的向下箭头,它也会选择第一项,浏览自动完成列表,然后在e时按Enter键。 G。选择了第4个结果。

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

Google地图会将类pac-item-selected添加到列表中所选的项目中,因此我的上次尝试基于检查length

$("#autocomplete").keypress(function(e){
  if ( $( ".pac-item-selected" ).length ) {
    if(e.which == 13) {
      select-first-item();
    }
  }
}

但是,只要你按下任何东西,课程就会消失,检查长度是行不通的。如果我使用event.preventDefault,整个功能都不起作用,因为自动完成显然是基于keypress / keydown / ...事件。

我无法正确地制作地图,所以我改编了一个老小提琴:http://jsfiddle.net/pbbhH/1222/

有没有解决方案?

2 个答案:

答案 0 :(得分:3)

使用自动填充的place_changed事件,您可以检查地点是否已更改:

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
    });  

答案 1 :(得分:0)

除了@ 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
};