javascript - 连接对象中的两个值

标签 javascript jquery arrays google-maps concatenation

我正在构建一个地点自动完成地址表单,就像此处看到的演示 https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform

但是在演示中,街道号码和街道名称被放入单独的字段中。我想要做的是将 street_number: 'short_name'route: 'long_name' 这两个值连接起来,并将它们放入一个新字段中。

我试图找到代码中这些值的存储位置,我看到了这个数组

var componentForm = {
    street_number: 'short_name',
    route: 'long_name',
    locality: 'long_name',
    administrative_area_level_1: 'long_name',
    administrative_area_level_2: 'long_name',
    postal_code: 'short_name'
};

因此,如果我执行 console.log(componentForm); 它会返回整个内容。所以我尝试了 console.log(componentForm[route]); 但控制台显示 route is undefined

所以我的问题是,如何找到街道号码和街道名称的值,然后将它们连接到表单中的新字段中?

发布我的完整脚本代码,因为它略有修改(我删除了地理编码服务和仅限于美国地址的建议,并且还添加了州县作为返回值之一)

// load google api
var placeSearch, autocomplete;
var componentForm = {
    street_number: 'short_name',
    route: 'long_name',
    locality: 'long_name',
    administrative_area_level_1: 'long_name',
    administrative_area_level_2: 'long_name',
    postal_code: 'short_name'
};

function initAutocomplete() {
    // Create the autocomplete object, restricting the search to US locations
    var input = document.getElementById('autocomplete');
    var options = {
        componentRestrictions: {
            country: 'us'
        }
    };

    autocomplete = new google.maps.places.Autocomplete(input, options);

    // When the user selects an address from the dropdown, populate the address
    // fields in the form.
    autocomplete.addListener('place_changed', fillInAddress);
}

function fillInAddress() {
    // Get the place details from the autocomplete object.
    var place = autocomplete.getPlace();

    for (var component in componentForm) {
        $(".autoSearch").hide(1000);
        $(".hiddenForm").show(1000);
        document.getElementById(component).value = '';
        document.getElementById(component).disabled = false;
    }

    // Get each component of the address from the place details
    // and fill the corresponding field on the form.
    for (var i = 0; i < place.address_components.length; i++) {
        var addressType = place.address_components[i].types[0];

        if (componentForm[addressType]) {
            var val = place.address_components[i][componentForm[addressType]];

            document.getElementById(addressType).value = val;

        }
    }
}

最佳答案

当您编写componentForm[route]时,javascript将查找route变量并使用其内容作为componentForm对象的属性名称,没有route变量,因此javascript告诉您:它是未定义的。

如果您想访问路由属性,您应该执行此 componentForm["route"] 或此 componentForm.route ,要创建此新字段,您应该添加一个像这样的行:

componentForm.full_address = componentForm.route + " " + componentForm.street_number;

关于javascript - 连接对象中的两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43126687/

相关文章:

arrays - 查找查询 - 在 $elemMatch 之后按数组大小过滤

javascript - ExpressJS 中的路由拒绝上传

javascript - 将 SlimScroll 添加到 iframe

c++ - 如何将 3 维数据用作类属性?

javascript - 当 anchor HREF 源不存在时隐藏图像

jquery - 网址.Action : Passing multiple variables

java - 顺序搜索 10000 个随机数文件中的 1000 个键

javascript - 多个 Div 一次显示/隐藏一个

javascript - React.js 未定义函数

javascript - Firefox 拖放重定向停止 JQUERY