Javascript gmap3在信息窗口中显示地址
我在地图标记上有一个单击事件来创建一个信息窗口,我正在尝试对地址进行地理编码以显示在信息窗口内Javascript gmap3在信息窗口中显示地址,javascript,jquery,google-maps,google-maps-api-3,Javascript,Jquery,Google Maps,Google Maps Api 3,我在地图标记上有一个单击事件来创建一个信息窗口,我正在尝试对地址进行地理编码以显示在信息窗口内 click: function(marker) { pantoUser(lati,longi,i); addInfoWindow(lati,longi,name,datestring); } 我几乎让它像这样工作: function addInfoWindow(lati,longi,nam
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>'
]
}
]
}
}
);
问题是,地理编码地址总是落后一个标记点。例如,我可能在伦敦点击一个标记,但什么也没发生。所以我再次点击它,我得到了带有地址的信息窗口。然后我点击曼彻斯特的一个标记,我仍然看到伦敦的地址,然后我点击利物浦的一个标记,我得到了曼彻斯特的地址。等等
有人能发现这个虫子吗
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
});
函数AddInfo窗口(纬度、经度、名称、日期字符串)
{
//获取地址
$(“#调度程序”).gmap3({
操作:'getAddress',
拉丁语:[拉丁语,拉丁语],
回调:函数(结果){
content=results&&results[1]?results&&results[1]。格式化的_地址:“无地址”;
//创建信息窗口
$(“#调度程序”).gmap3(
{操作:“AddInfo窗口”,
拉丁语:[拉丁语,拉丁语],
信息窗口:{
选项:{
内容:姓名
},
活动:{
关闭单击:功能(信息窗口、事件){
//警报('closing:'+$(this.attr('id')+':'+infowindow.getContent());
}
},
适用于:[
{操作:'setContent',
args:[
''+name+'
'+content+'
'+datestring+''
]
}
]
}
}
);
}//结束回调
});
}这看起来不像标准的谷歌地图JavaScript v3代码;
gmap3
引用的是来自jQuery的东西吗?另外,有些东西似乎没有联系在一起,getAddress
函数返回content
,但是addinfo窗口中的代码似乎没有使用该值
但听起来问题的根源可能在于getAddress
函数中的回调方面;当addInfo窗口中调用后的代码运行时,您无法确定回调是否已完成。听起来可能会发生以下情况:
addInfo窗口
函数被调用
在addInfo窗口中
调用getAddress
函数
getAddress
快速运行并完成,将控制权返回到addInfo窗口
函数,但回调尚未运行
代码第一次运行时,内容
尚未生成(因为回调尚未运行),因此不会显示任何内容
返回addInfo窗口
函数后,会运行getAddress
回调,因为收到了响应,从而建立了内容
再次调用addInfo窗口
,以相同的方式运行,但这次它使用上次回调后设置的内容,因此它使用上一次运行中的内容
场景只是重复,重复,重复
您的问题中有一些令人困惑的部分,如果不能够向代码中添加alert
调用或看到代码运行,就有点难以确定,但听起来很可能您的代码遵循了我上面描述的步骤或类似的操作
如果这听起来适合您的问题,最简单的解决方法是将InfoWindow
显示代码与回调代码放在一起。这样,您就知道内容已经设置好了,因为回调在返回响应时运行。Hi Sean,谢谢您的时间。我怀疑问题出在那些线路上。是的,gmap3是谷歌地图api()的jquery插件没有问题;很乐意帮忙。我在回答中又加了一小段,因为你认为我所描述的内容适合你的问题。希望能有帮助-
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
});