我一直在搜索stackoverflow和其他网站,但无济于事。我是一个新手程序员,我完全被这个问题困住了。
我有一个数组,结构如下:
AddressASuburbAAddressBSuburbB
当下面的代码运行时,它通过放置一个标记来更新地图,并在该标记周围放置一个10英里的圆圈。问题是,当我将鼠标悬停在标记上时,工具提示/标题始终是suburban,即使标记和圆圈处于正确的位置。
快把我逼疯了,希望能得到帮助!
function codeAddress(){
var arrayLength = array.length;
var looper = 0;
var looper2 = 1;
while (looper < arrayLength) {
alert("Geocode started");
sAddress = array[looper];
alert (looper)
alert("Address set" + sAddress)
sName = array[looper2];
alert (looper2)
alert("Name set" + sName)
geocoder.geocode( {'address': sAddress}, function(results, status) {
alert("Make marker");
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter (results[0].geometry.location);
var marker2 = new google.maps.Marker({
map: map,
title: sName,
position: results[0].geometry.location
});
var circle = new google.maps.Circle({
map: map,
radius: 16093, // 10 miles in metres
fillColor: '#AA0000',
strokeWeight: 2,
strokeOpacity: 0.5
});
circle.bindTo('center', marker2, 'position');
} else {
alert("Geocode was not successful for the following reason: " + status);
}
})
looper = looper + 2;
looper2 = looper2 + 2;
}
}
您遇到了臭名昭著的Javascript循环问题。javascript作用域是函数级,而不是块级,这可能会让人困惑:http://coding.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/。基本上,这一行:
geocoder.geocode( {'address': sAddress}, function(results, status) {
为每个地理编码设置数组中的最后一项,您需要做的是将第一个参数包装在闭包中:
geocoder.geocode( (function () { return {'address': sAddress} })(), function(results, status) {
标记和圆圈是可以的,因为它们是在函数内部定义的。