繁体   English   中英

多个Google自动完成和地点搜索问题

[英]Multiple Google Autocomplete and Places Search Issue

我需要有关Google Maps API以及使用自动完成功能和地址完成功能的帮助。

目前这是我的代码:

JS

function fillInAddress(show) {
                    console.log(show);
                    var place = autocomplete.getPlace();
                    for (var i = 0; i < place.address_components.length; i++){
                        var base = place.address_components[i].types[0];
                        if(base === "postal_code"){
                            console.log(place.address_components[i].long_name);
                        }
                    }
                }

function initialize(out) {
            autocomplete = new google.maps.places.Autocomplete(
                    (document.getElementById(out)),
                    {types: ['geocode']});
            google.maps.event.addListener(autocomplete, 'place_changed', function () {
                fillInAddress(out);
            });
        }
        initialize("from");
        initialize("to");

的HTML

<input type="text" id="from" class="location">
<input type="text" id="to" class="location">
<input id="fromPc" type="text">
<input id="toPc" type="text">

地方下拉列表可以正常运行,您可以键入,然后再提出建议。

但是,当我单击from输入中的建议之一时,在控制台中出现此错误。

Uncaught TypeError: Cannot read property 'address_components' of undefined

但是,当我在“至”输入框中执行此操作时,它可以正常工作并返回邮政编码。

如果我然后返回到第一个输入“ from”,然后再次输入地址,则它这次返回一个邮政编码,但是它从第二个输入“ to”返回该邮政编码。

有谁知道如何解决这个问题。

感谢您的帮助!

您正在覆盖initialize的(全局)变量autocomplete

将变量设为局部内部initialize ,并将其作为参数传递给fillInAddress

function fillInAddress(show,ac) {

                    var place = ac.getPlace();
                    for (var i = 0; i < place.address_components.length; i++){
                        var base = place.address_components[i].types[0];
                        if(base === "postal_code"){
                            document.getElementById(show+'Pc').value
                              = place.address_components[i].long_name;
                              return;
                        }
                    }
                }

function initialize(out) {
           var  autocomplete = new google.maps.places.Autocomplete(
                    (document.getElementById(out)),
                    {types: ['geocode']});

            google.maps.event.addListener(autocomplete, 'place_changed', 
               function () {
                document.getElementById(out+'Pc').value='';
                fillInAddress(out,autocomplete);
            });
        }
initialize("from");
initialize("to");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM