我希望有人可以帮助我使用我的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 '未定义'。
我已经在这里阅读了类似问题的其他帖子,但我已经阅读了所有的回复,即使他们遇到同样的问题,但对他们起作用的解决方案都没有对我有用,或者它们与我们无关。我写过。
先谢谢。
答案 0 :(得分:2)
这里有很多问题:
您正尝试通过分配参数名marker1
来修改传递到codeAddress
函数中的markerValue
变量。 JavaScript没有传递引用参数,因此marker1
不会因为您为markerValue
分配值而受到任何影响。因此,稍后当您尝试使用marker1
执行某项操作时,它仍然具有默认值(undefined
)。
Google Maps的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');
}