2013-09-24 49 views
1

我希望有人可以用我的Google Maps API代码来帮助我。谷歌地图 - 无法读取未定义的属性'__e3_'

我已经设置了一个有多个标记的地图,但是我想为标记添加点击事件,这样就会出现一个信息窗口,这是我遇到问题的地方。

$(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); 
    }); 
} 

所以我得到的错误“无法读取属性‘_ ’未定义” E3当我包括的addListener代码。

我已阅读过类似问题的其他帖子,但我已阅读所有回复,即使它们具有相同的问题,没有任何适用于他们的解决方案适用于我,或者它们与这是我写的。

在此先感谢。

回答

2

这里有多种问题:

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

  2. 谷歌地图的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'); 
} 
相关问题