我在地图标记上有一个点击事件来创建一个infowindow,我正在尝试对地址进行地理编码以显示在infowindow内。
click: function(marker) {
pantoUser(lati,longi,i);
addInfoWindow(lati,longi,name,datestring);
}
我几乎让它像这样工作:
function addInfoWindow(lati,longi,name,datestring)
{
// get address
getAddress(lati,longi);
// create infowindow
$('#dispatcher').gmap3(
{ action: 'addInfoWindow',
latLng: [lati, longi],
infowindow:{
options:{
content: name
},
events:{
closeclick: function(infowindow, event){
//alert('closing : ' + $(this).attr('id') + ' : ' + infowindow.getContent());
}
},
apply:[
{ action:'setContent',
args:[
'<span class="infowindow">' + name + '<br />' + content + '<br />' + datestring + '<span>'
]
}
]
}
}
);
}
然后是获取地址部分:
function getAddress(lati,longi)
{
$("#dispatcher").gmap3({
action:'getAddress',
latLng: [lati, longi],
callback:function(results){
content = results && results[1] ? results && results[1].formatted_address : 'No Address';
return content;
}
});
}
问题是地理编码的地址始终是一个标记点击后面。例如,我可以点击伦敦的标记,没有任何反应。所以我再次点击它,我得到了地址的infowindow。然后我点击曼彻斯特的标记,我仍然看到伦敦地址,然后我点击利物浦的标记,我得到曼彻斯特地址。等等。
有人能发现这个错误吗?
来自SEAN的更新工作解决方案 在回调中添加了infowindow代码
function addInfoWindow(lati,longi,name,datestring)
{
// get address
$("#dispatcher").gmap3({
action:'getAddress',
latLng: [lati, longi],
callback:function(results){
content = results && results[1] ? results && results[1].formatted_address : 'No Address';
// create infowindow
$('#dispatcher').gmap3(
{ action: 'addInfoWindow',
latLng: [lati, longi],
infowindow:{
options:{
content: name
},
events:{
closeclick: function(infowindow, event){
//alert('closing : ' + $(this).attr('id') + ' : ' + infowindow.getContent());
}
},
apply:[
{ action:'setContent',
args:[
'<span class="infowindow">' + name + '<br />' + content + '<br />' + datestring + '<span>'
]
}
]
}
}
);
} // end callback
});
}
答案 0 :(得分:1)
这看起来不像标准的Google Maps JavaScript v3代码;是来自jQuery的gmap3
引用?此外,某些内容似乎没有挂在一起 - getAddress
函数返回content
,但addInfoWindow
函数中的代码似乎没有使用该值。
但听起来问题的根源可能在于callback
函数中代码的getAddress
方面;当addInfoWindow
内的调用后的代码运行时,您无法确定回调是否已完成。听起来可能会发生以下情况:
addInfoWindow
函数被称为addInfoWindow
内getAddress
函数称为getAddress
运行并快速完成,将控制权返回给addInfoWindow
函数,但回调尚未运行content
尚未构建(因为回调尚未运行),因此未显示任何内容addInfoWindow
函数后,getAddress
回调会运行,因为收到了响应,从而建立了content
addInfoWindow
,运行方式相同,但这次它使用的是上次回调后设置的内容,因此它使用的是上次运行中的content
您的问题有一些令人困惑的部分,如果不能在代码中添加alert
调用或查看代码运行,确实有点难以确定,但很可能您的代码遵循了我在上面描述的步骤或类似的东西。
如果它听起来符合您的问题,最直接的解决方法是将InfoWindow
显示代码放入回调代码中。这样,您就知道已经设置了内容,因为回调时会返回回调。