2

此代码不起作用。请告诉我确切的解决方案

<script src="maps.googleapis.com/maps/api/…; type="text/javascript"></script>
<script type="text/javascript">
   function initialize() {
      var input = document.getElementById('searchTextField');
      /* restrict to multiple cities? */
      var options = {
          types: ['(cities)'],
          componentRestrictions: {country: ["usa", "uk"]}
      };
      var autocomplete = new google.maps.places.Autocomplete(input, options); 
   }
   google.maps.event.addDomListener(window, 'load', initialize);
</script>

更新

2017 年 1 月,Maps JavaScript API 3.27 版中引入了多个国家/地区过滤器自动完成功能:

您现在可以将自动完成预测限制为仅来自多个国家/地区的显示。您可以通过在 AutocompleteOptions 的 componentRestrictions 字段中指定最多 5 个国家来做到这一点。

https://developers.google.com/maps/documentation/javascript/releases#327

4

6 回答 6

6

首先,您不能从多个国家/地区进行过滤。这是此处报告的已知问题。

然后对于您的代码,您必须使用两个字符串作为国家代码:

componentRestrictions 可用于将结果限制为特定组。目前,您可以使用 componentRestrictions 按国家/地区进行过滤。国家必须作为两个字符传递,ISO 3166-1 Alpha-2 兼容的国家代码。来源

这是我 jsfiddled 的一个国家工作示例(取自Google 示例列表)。

于 2012-07-02T09:57:51.357 回答
4

这是我通过操纵多个自动完成 div 的位置一直在使用的解决方法:

    var location = $('#location');
var options1 =  { 
                    types: ['(cities)'],
                    componentRestrictions: {country: 'uk'}
                }
var options2 =  { 
                    types: ['(cities)'],
                    componentRestrictions: {country: 'irl'}
                }
if (location.exists()) { 
    $(location).each(function(index){
        new google.maps.places.Autocomplete(this, options2);
        new google.maps.places.Autocomplete(this, options1);
    });
 var pressed = 0;
            google.maps.event.addDomListener(this, 'keydown', function(e){
            if (e.keyCode == 40 || e.keyCode == 38) { 
                e.preventDefault();
                e.stopPropagation();
                e.stopImmediatePropagation();
            }
        },true); 
    location.keypress(function(e) {
        setTimeout(function(e){
            setInterval(function(e){
            if($('.pac-container.pac-logo').last().css('display') != 'none' ){
                $('.pac-container.pac-logo').first().children('.pac-item').appendTo($('.pac-container.pac-logo').last())
            }
            else{
                $('.pac-container.pac-logo').last().children('.pac-item').appendTo($('.pac-container.pac-logo').first())
            }
            },100)

        }
        ,300)
    });
}

CSS:

.pac-container.pac-logo:last-of-type {
     box-shadow: none !important;
}
.pac-container.pac-logo:last-of-type:after {
    content: none !important;
}
于 2016-05-23T08:43:07.060 回答
3

在等待谷歌的解决方案两年后,我意识到了一个新项目的解决方法。

该功能是过滤多个组件限制并将顶部结果合并到一个数组中。这意味着一个接一个地给出特定的结果集。

也许这个解决方案可以优化,即所有国家或地区的整体结果都应诉诸行政区域、城市和街道的“权重”。

摆弄的脚本在这里

主要功能(之后有回调的多个请求):

       service = new google.maps.places.AutocompleteService();
       var request1 = {
         input: inputData,
         componentRestrictions: {country: 'de'},
       };
       var request2 = {
         input: inputData,
         componentRestrictions: {country: 'at'},
       };
       var request3 = {
         input: inputData,
         componentRestrictions: {country: 'ch'},
       };
       $('#result').empty();
       service.getPlacePredictions(request1, callback);
       service.getPlacePredictions(request2, callback);            
       service.getPlacePredictions(request3, callback);   
于 2016-03-17T14:51:21.113 回答
2

更新一下,在 2017 年 1 月 Maps JavaScript API 3.27 版发布后,多个国家/地区过滤器可能会传递一系列字符串国家/地区代码。

于 2017-05-22T09:35:48.117 回答
-2

为什么您不放置单选按钮/复选框等来获取多个国家/地区的地址,也许这对你们有用。var valueofcountry=“ca”;// 假设这个值来自复选框/收音机

    var autoCompleteOptions = {componentRestrictions: {country: valueofcountry}};
于 2015-07-30T14:54:36.747 回答
-2

最后我得到了这个问题的解决方案..我希望这段代码能工作..试试这个

// FOR SPECIFIC COUNTRY 'INDIA' ONLY 
var options = {
    types: ['(cities)'],
    componentRestrictions: {country: "IN"}
};

autocomplete = new google.maps.places.Autocomplete(document.getElementById('text_box_id'), options);
/*  When the user selects an address from the dropdown,
    populate the address fields in the form. */
google.maps.event.addListener(autocomplete, 'place_changed', function() {
    fillInAddress();
});

// FOR SPECIFIC COUNTRY 'US' ONLY 
var options = {
    types: ['(cities)'],
    componentRestrictions: {country: "US"}
};

autocomplete = new google.maps.places.Autocomplete(document.getElementById('text_box_id'), options);
/*  When the user selects an address from the dropdown,
    populate the address fields in the form. */
google.maps.event.addListener(autocomplete, 'place_changed', function() {
    fillInAddress();
});
于 2016-01-13T12:09:56.263 回答