2016-03-08 65 views
0

我试图限制自动完成某一特定国家,即美国。我怎样才能做到这一点?下面我试过以下,通过将可变的选项作为参数传入初始化函数:限制谷歌Places API的具体国家

<script> 
    var autocomplete = {}; 
    var autocompletesWraps = ['test', 'test2']; 

    var test_form = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; 
    var test2_form = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; 

    function initialize() { 

     var options = { 
      types: ['(cities)'], 
      componentRestrictions: {country: "us"} 
     }; 

     $.each(autocompletesWraps, function(index, name) { 

      if($('#'+name).length == 0) { 
       return; 
      } 

      autocomplete[name] = new google.maps.places.Autocomplete($('#'+name+' .autocomplete')[0], { types: ['geocode'] }, options); 

      google.maps.event.addListener(autocomplete[name], 'place_changed', function() { 

       var place = autocomplete[name].getPlace(); 
       var form = eval(name+'_form'); 

       for (var component in form) { 
        $('#'+name+' .'+component).val(''); 
        $('#'+name+' .'+component).attr('disabled', false); 
       } 

       for (var i = 0; i < place.address_components.length; i++) { 
        var addressType = place.address_components[i].types[0]; 
        if (typeof form[addressType] !== 'undefined') { 
         var val = place.address_components[i][form[addressType]]; 
         $('#'+name+' .'+addressType).val(val); 
        } 
       } 
      }); 
     }); 
    } 
</script> 

回答

1

你没有通过options正确。​​3210需要两个参数,并且你传递三个参数。

具体来说,在这一行:

autocomplete[name] = new google.maps.places.Autocomplete(
    $('#'+name+' .autocomplete')[0], { types: ['geocode'] }, options); 

options参数是未使用的,因为你已经通过{ types: ['geocode'] }作为选项。如果你想在谷歌地址API只有英国地址整合

var options = { 
    types: ['geocode'], // or '(cities)' if that's what you want? 
    componentRestrictions: {country: "us"} 
}; 
autocomplete[name] = new google.maps.places.Autocomplete(
    $('#'+name+' .autocomplete')[0], options); 
+0

谢谢。没有意识到它只接受了两个,但是因为我的后两个基本上彼此相等,所以是合理的。 – santafebound

1

所以删除多余的参数。请找出以下地址:

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=API_KEY&libraries=places" async defer></script> 

<script type="text/javascript> 
var autocomplete; 
function initialize() { 
    autocomplete = new google.maps.places.Autocomplete(
     (document.getElementById('txtpostcode')), 
     { types: ['geocode'] }); 
    autocomplete.setComponentRestrictions(
      {'country': ['uk']}); 
    google.maps.event.addListener(autocomplete, 'place_changed', function() { 
    }); 
} 
</script>