2016-03-08 4 views
0

Я пытаюсь ограничить автозаполнение конкретной страной, то есть США. Как я могу это сделать? Я пробовал ниже следующее, путем передачи переменных параметров в качестве параметра в функцию инициализации:Ограничение API Google Адресов в конкретной стране

<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 правильно. Autocomplete принимает два аргумента, и вы проходите три.

В частности, в этой строке:

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

ваш параметр options не используется, потому что вы прошли { types: ['geocode'] } в качестве опции.

Так удалить дополнительный аргумент:

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

Если вы хотите интегрировать адресную API Google только с Великобританией адреса. Пожалуйста, найдите адрес:

<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> 
Смежные вопросы