这个问题与这个问题的答案有关:Google maps Places API V3 autocomplete - select first option on enter。基本上,当用户按下回车键时,该字段使用自动完成列表中的第一个建议。该问题的答案有一个jsfiddle - http://jsfiddle.net/dodger/pbbhH/ - 除非文本字段失去焦点,否则字段值将返回到部分输入的值。
例如,用户点击输入字段并输入“牛”,自动完成框会弹出一些建议,然后用户按下回车键。然后更改地图以显示自动完成框中第一个项目的位置(带有标记),输入字段的值将更改为自动完成框中的第一个项目。然后,用户单击字段外的某处,输入字段的值将返回“ox”。
我希望输入字段的值保留为第一个自动完成建议。
答案 0 :(得分:11)
试试这个:http://jsfiddle.net/pbbhH/60/
基本上将选择逻辑抽象为新函数 selectFirstResult()。然后在按下输入和失去对文本的焦点时调用此函数。
function selectFirstResult() {
infowindow.close();
var firstResult = $(".pac-container .pac-item:first").text();
var geocoder = new google.maps.Geocoder();
geocoder.geocode({"address":firstResult }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var lat = results[0].geometry.location.lat(),
lng = results[0].geometry.location.lng(),
placeName = results[0].address_components[0].long_name,
latlng = new google.maps.LatLng(lat, lng);
moveMarker(placeName, latlng);
$("input").val(firstResult);
}
});
}
编辑:根据@ Ben的评论做了一些小改动。
答案 1 :(得分:1)
这是正确的,但如果您按Enter键并且您已经选择了一个项目,则会选择第一项。 所以使用这段代码:
function selectFirstResult() {
infowindow.close();
if ( $('.pac-selected').length < 0){ // this line
var firstResult = $(".pac-container .pac-item:first").text();
var geocoder = new google.maps.Geocoder();
geocoder.geocode({"address":firstResult }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var lat = results[0].geometry.location.lat(),
lng = results[0].geometry.location.lng(),
placeName = results[0].address_components[0].long_name,
latlng = new google.maps.LatLng(lat, lng);
moveMarker(placeName, latlng);
$("input").val(firstResult);
}
});
}
}