Javascript Google放置API抓取子局部性\u级别\u 1(如果存在),否则清除文本字段
我有一个文本字段,允许用户输入他们的位置,并从GooglePlacesAPI返回结果(城市)。以下是用户选择位置后我用来填写表单字段的代码: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);
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起作用之后,我相信事情就这么简单。谢谢!