谷歌地图自动完成和自动完成服务之间的结果不同

时间:2013-03-20 04:43:30

标签: javascript google-maps-api-3

我使用谷歌地图APIv3 AutocompleteService将数据提取到bootstrap的预先输入。但是,使用谷歌的内置自动完成功能,与结果返回相比,结果有点不准确。

我的HTML代码:

<label>Built-in</label><input type="text" id="address1" />
<label>Customize</label><input type="text" id="address2" />

我的剧本:

<script>
    //this input use google built-in autocomplete
    var input1 = document.getElementById('address1');
    autocomplete = new google.maps.places.Autocomplete(input1);

    //this input use google AutocompleteService
    $('#address2').typeahead({
        source: process_keyword
    });

    var service = new google.maps.places.AutocompleteService();

    function process_keyword(query, process) {
        var place_results = [];
        var request = {
            input: query,
            types: ['geocode']
        };
        service.getPlacePredictions(request, function (predictions, status) {
            process($.map(predictions, function (prediction) {
                return prediction.description;
            }));
        });
    }
</script>

我已在此处发布完整代码:http://jsbin.com/ididas/1/edit

例如我输入

  

9 dinh tien hoang

到第一个框,它将显示5个结果。但是当我向第二个框输入相同的查询时,它只会显示2个结果。

我的问题是为什么他们有这个不同,我如何修复,以便我的自定义预先完成作为内置自动完成工作

1 个答案:

答案 0 :(得分:3)

对我而言,service.getPlacePredictions()也会返回5个结果。问题出现在$.typeahead中,因为当您搜索9 dinh tien hoang并且服务返回9 Đinh Tiên Hoàng时,查询字符串与结果不匹配(例如,搜索d将与Đ不匹配,这是一个完全不同的角色。)

由于您根本不需要对$.typeahead()进行任何过滤(因为autocompleteService已经返回过滤结果),您可以将其添加到$ .typeahead-options:

matcher:function(){return true;}