2016-03-08 61 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>