【问题标题】:Google Maps - cannot read property '__e3_' of undefined谷歌地图 - 无法读取未定义的属性“__e3_”
【发布时间】:2013-09-24 11:00:13
【问题描述】:

我希望有人可以帮助我处理我的 Google Maps API 代码。

我已经设置了一个带有多个标记的地图,它可以成功运行,但是我想向标记添加点击事件,以便出现一个信息窗口,这就是我遇到问题的地方。

$(document).ready(function() {
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "http://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=true&callback=mapInitialize";
    document.body.appendChild(script);
});
function mapInitialize() {
    var options = {  
        zoom: 5,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById('map_div'), options);
    geocoder = new google.maps.Geocoder();
    function codeAddress(markerValue, addressValue) {
        geocoder.geocode({ 'address': addressValue}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                map.setCenter(results[0].geometry.location);
                markerValue = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location
                });
            }
        });
    }
    var marker1;
    codeAddress(marker1, '1 My Road, Somewhere, A1 1AA');
    var infowindow1 = new google.maps.InfoWindow({
        content: '<div class="infowindow"><strong><a href="http://mylink.com">Title</a></strong><br />Address details</div>'
    }); 
    google.maps.event.addListener(marker1, 'click', function() {
        infowindow1.open(map, marker1);  
    });
}

所以当我包含 addListener 代码时,我收到错误“无法读取未定义的属性 '_e3'”。

我在这里阅读过类似问题的其他帖子,但我已经阅读了所有回复,即使他们有同样的问题,对他们有用的解决方案都没有对我有用,或者它们与 waht 无关我写了。

提前致谢。

【问题讨论】:

    标签: javascript google-maps google-maps-api-3


    【解决方案1】:

    这里有多个问题:

    1. 您正在尝试通过分配参数名称 markerValue 来修改从函数内部传递到您的 codeAddress 函数的 marker1 变量。 JavaScript 没有按引用传递的参数,因此 marker1 不会受到您为 markerValue 赋值的任何影响。所以以后当你尝试用marker1做某事时,它仍然有它的默认值(undefined)。

    2. Google 地图的 API 是异步。您对geocoder.geocode 的调用开始该过程,但它稍后完成,在codeAddress 返回很久之后。

    您需要将后续代码移至 codeAddress,特别是移至来自geocode 的完成回调中。

    类似这样的东西(完全未经测试,这个想法是为您指出正确的方向,而不是为您编写完美的解决方案):

    function mapInitialize() {
        var options = {  
            zoom: 5,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById('map_div'), options);
        geocoder = new google.maps.Geocoder();
        function codeAddress(addressValue) {
            geocoder.geocode({ 'address': addressValue}, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    var marker, infowindow1;
    
                    map.setCenter(results[0].geometry.location);
                    marker = new google.maps.Marker({
                        map: map,
                        position: results[0].geometry.location
                    });
    
                    infowindow = new google.maps.InfoWindow({
                        content: '<div class="infowindow"><strong><a href="http://mylink.com">Title</a></strong><br />Address details</div>'
                    }); 
                    google.maps.event.addListener(marker, 'click', function() {
                        infowindow.open(map, marker);  
                    });
                }
            });
        }
        codeAddress('1 My Road, Somewhere, A1 1AA');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-19
      • 2017-04-03
      • 2017-11-09
      • 2021-11-03
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多