Javascript Google放置API抓取子局部性\u级别\u 1(如果存在),否则清除文本字段

Javascript Google放置API抓取子局部性\u级别\u 1(如果存在),否则清除文本字段,javascript,jquery,google-maps,google-maps-api-3,Javascript,Jquery,Google Maps,Google Maps Api 3,我有一个文本字段,允许用户输入他们的位置,并从GooglePlacesAPI返回结果(城市)。以下是用户选择位置后我用来填写表单字段的代码: function fillInAddress() { // Get the place details from the autocomplete object. var place = autocomplete.getPlace(); var lat = place.geometry.location.lat().toFixed(6);

我有一个文本字段,允许用户输入他们的位置,并从GooglePlacesAPI返回结果(城市)。以下是用户选择位置后我用来填写表单字段的代码:

function fillInAddress() {
  // Get the place details from the autocomplete object.
  var place = autocomplete.getPlace();
  var lat = place.geometry.location.lat().toFixed(6);
  var lng = place.geometry.location.lng().toFixed(6);

  var components = place.address_components;
  for (var i = 0, component; component = components[i]; i++) {
        if (component.types[0] == 'locality') {
            $('#id_city').val(component['long_name'])
        }
        if (component.types[0] == 'administrative_area_level_1') {
            $('#id_state').val(component['short_name'])
        }
        if (component.types[0] == 'country') {
            $('#id_country_short').val(component['short_name'])
        }
        if (component.types[0] == 'country') {
            $('#id_country_long').val(component['long_name'])
        }
        if (component.types[0] == 'sublocality_level_1') {
            $('#id_region').val(component['long_name'])
        }else{
            $('#id_region').val('')
        }
    }
  $('#lat').val(lat)
  $('#lng').val(lng)
}
非常直截了当,但并不总是有一个“区域”(或亚局部性级别1)与它们的位置一起选择。我试图做的是清除任何旧区域的#id_region字段,如果它们选择的新位置没有区域/子局部级别_1。问题是,即使存在子局部性级别1,代码似乎仍会命中清除#id_区域文本字段的“else”语句


知道我做错了什么吗?

问题的存在是因为
区域的
if…else
的结构。因为如果在
区域
之后的
组件
数组中有任何
组件
,那么它将。。。清除该区域

从循环中删除
else
。开始循环之前,请清除
区域
。这样,如果集合中有一个
区域
,您将填充它,如果没有,它将保持为空

function fillInAddress() {
  // Get the place details from the autocomplete object.
  var place = autocomplete.getPlace();
  var lat = place.geometry.location.lat().toFixed(6);
  var lng = place.geometry.location.lng().toFixed(6);

  var components = place.address_components;

  $('#id_region').val('');

  for (var i = 0, component; component = components[i]; i++) {
        if (component.types[0] == 'locality') {
            $('#id_city').val(component['long_name'])
        }
        if (component.types[0] == 'administrative_area_level_1') {
            $('#id_state').val(component['short_name'])
        }
        if (component.types[0] == 'country') {
            $('#id_country_short').val(component['short_name'])
        }
        if (component.types[0] == 'country') {
            $('#id_country_long').val(component['long_name'])
        }
        if (component.types[0] == 'sublocality_level_1') {
            $('#id_region').val(component['long_name'])
        }
    }
  $('#lat').val(lat)
  $('#lng').val(lng)
}

除了@gforce301所说的之外,您还需要处理组件中的所有类型:

  var components = place.address_components;
  $('#id_region').val('')
  for (var i = 0, component; component = components[i]; i++) {
    for (var j = 0; j < component.types.length; j++) {
      if (component.types[j] == 'locality') {
        $('#id_city').val(component['long_name'])
      }
      if (component.types[j] == 'administrative_area_level_1') {
        $('#id_state').val(component['short_name'])
      }
      if (component.types[j] == 'country') {
        $('#id_country_short').val(component['short_name'])
      }
      if (component.types[j] == 'country') {
        $('#id_country_long').val(component['long_name'])
      }
      if (component.types[j] == 'sublocality_level_1') {
        $('#id_region').val(component['long_name'])
      }
    }
var components=place.address\u components;
$('id_region').val('')
对于(变量i=0,组件;组件=组件[i];i++){
对于(var j=0;j
(亚地方性1级:纽约布鲁克林;波兰华沙罗德米)

代码片段:

函数initAutocomplete(){
//创建自动完成对象,将搜索限制为地理位置
//位置类型。
autocomplete=new google.maps.places.autocomplete(
/**@type{!HTMLInputElement}*/
(document.getElementById('autocomplete')){
类型:['geocode']
});
//当用户从下拉列表中选择地址时,填充该地址
//表单中的字段。
autocomplete.addListener('place\u changed',fillInAddress);
}
google.maps.event.addDomListener(窗口“加载”,initAutocomplete);
函数fillInAddress(){
//从自动完成对象获取位置详细信息。
var place=autocomplete.getPlace();
var lat=place.geometry.location.lat().toFixed(6);
var lng=place.geometry.location.lng().toFixed(6);
var组件=place.address\u组件;
$('id_region').val('')
对于(变量i=0,组件;组件=组件[i];i++){
对于(var j=0;j

街道地址
城市
状态
区域
国
国

您只看到类型数组的第一个成员,通常不止这些。谢谢。这似乎效果很好。虽然我对for
(var j=0;j
您添加的行。抱歉,我一直在摸索这一行,查看堆栈溢出帖子,其中很多内容让我有点困惑。这一行是做什么的?添加,它似乎给了我相同的结果,没有或没有您添加的代码。所以我不确定它到底在做什么。谢谢……现在我觉得自己像个白痴。我不能在我花了这么多时间试图让if/else起作用之后,我相信事情就这么简单。谢谢!