6

这个问题与这个问题的答案有关:Google maps Places API V3 autocomplete - select first option on enter。基本上,它是让该字段在用户按下回车时使用自动完成列表中的第一个建议。该问题的答案有一个 jsfiddle - http://jsfiddle.net/dodger/pbbhH/ - 除非文本字段失去焦点,否则字段值将返回到部分输入的值。

例如,用户在输入字段中单击并键入“ox”,自动完成框会弹出一些建议,然后用户按下回车键。然后更改地图以显示自动完成框中第一项的位置(带有标记),并且输入字段的值更改为自动完成框中的第一项。然后,用户单击字段外的某处,输入字段的值返回“ox”。

我希望输入字段的值保留为第一个自动完成建议。

4

2 回答 2

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 下面的评论进行了微小的更改。

于 2012-05-27T07:43:06.637 回答
1

这是正确的,但如果你按下回车键并且你已经选择了一个项目,这将选择第一个。所以使用这个代码:

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);
    }
});
}   
}
于 2012-10-03T12:15:39.230 回答