谷歌地图 - 无法读取未定义的属性'__e3_'

时间:2013-09-24 11:00:13

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

我希望有人可以帮助我使用我的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 '未定义'。

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

先谢谢。

1 个答案:

答案 0 :(得分:2)

这里有很多问题:

  1. 您正尝试通过分配参数名marker1来修改传递到codeAddress函数中的markerValue变量。 JavaScript没有传递引用参数,因此marker1不会因为您为markerValue分配值而受到任何影响。因此,稍后当您尝试使用marker1执行某项操作时,它仍然具有默认值(undefined)。

  2. Google Maps的API 异步。您对geocoder.geocode 的调用将启动该流程,但会在codeAddress返回很久之后完成。

  3. 您需要将后续代码移至 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');
    }