我正在使用google.maps javascript API v3。我需要使用“点击”听众将一组公民地址转换为谷歌地图上的标记。当用户点击地图中的标记时,我想要打开另一个窗口,其中包含与该地址相关的网址(另一个标签是理想的)。
我无法保持地址和网址之间的关系,因为我正在使用google方法地理编码()的javascript Closure。
我有一组地址,例如
var addresses = [ '123 street street', '124 street street' ];
var urls = [ 'www.example.com/1', 'www.example.com/2' ];
然后我使用API在地图上进行地理编码和创建标记
for (var i = 0; i<addresses.length; i++)
{
var address = addresses[i];
var url = urls[i];
geocoder.geocode(
{ 'address' : address },
function(result, status) {
var x = url // url == ""
var marker = new google.maps.Marker({
position: result[0].geometry.location,
map: map,
title:"Test"
});
google.maps.event.addListener(marker, 'click', function(event){
alert(url);
window.open(url);
},false);
}
}
在匿名函数中,如何使用var url
?
答案 0 :(得分:0)
似乎解决方案是将所有内容拆分为不同的函数。
function showAddress() {
//geocoder = new Geocoder();
for (var i = 0; i<addresses.length; i++)
{
var address = addresses[i];
var url = urls[i];
findAddress(address,url);
pausecomp(400);
}
}
function findAddress(address,url)
{
geocoder.geocode(
{ 'address' : address },
function(result, status) {
var marker;
if(status == google.maps.GeocoderStatus.OK) {
marker = new google.maps.Marker({
position: result[0].geometry.location,
map: map,
title:"Longueuil"
});
}
attachUrl(marker, url);
}
);
}
function attachUrl(marker, url)
{
google.maps.event.addListener(marker, 'click', function(event){
alert(url);
window.open(url);
},false);
}
我的猜测是函数调用会创建变量所持有的值的持久副本,而不仅仅是指向它们的指针。