假设你所需要的是marker1,
那么利用javascript闭包.
可以定义一个函数
var onMouseOver = function(marker, info){
return function(){
marker.openInfoWindow(info);
}
}
然后将event修改成这样:
GEvent.addListener(marker1,"mouseover", onMouseOver(marker1,
infoDiv1));
On 11月22日, 下午2时47分, 秦志坚 <qin...@gmail.com> wrote:
> geru们好!
> 在下面的循环体中,会设置变量addrinfo,然后在回调函数中会引用到此变量,但下一次循环的执行比回调函数的执行快,所以,当回调函数执行时,变量值已发 生了变化。
> 请问:如何在回调函数中引用以前的变量值?
> 是否可在回调函数中引入参数?
> 另一种解决方法是:延迟下一次循坏的执行,但因为不能确切知道回调函数何时返回,所以还是有出错的可能。
> 是否有妥当的解决办法?
>
> for (i=0;i<addrLength;i++) {
> var addrInfo = allAddr[i];
> geocoder.getLatLng(addrInfo.ad,function(point1) {
> if (!point1) {
> alert("该地址不能解析: " + addrInfo.ad);
> } else {
> map.setCenter(point1, iZoomLevel);
> var marker1 = new GMarker(point1);
> map.addOverlay(marker1);
> var infoDiv1 = document.createElement("div");
> infoDiv1.innerHTML =
> "时间:"+addrInfo.pt+"<br>电话:"+addrInfo.pn+"<br>地址:"+addrInfo.ad;
>
> GEvent.addListener(marker1,"mouseover",function(){marker1.openInfoWindow(in foDiv1);});
你这个写法还有一个问题是你的请求会失败.
要一次查询多个地址的话,可以参考一下这个页面.
http://ip13800.appspot.com/?act=geo
上面有一次解析400多个地址的示例.
On 11月23日, 下午12时28分, 秦志坚 <qin...@gmail.com> wrote:
> 问题已解决。
> 实际上,封装函数要把(调用回调函数的语句)封装在函数体内,并把回调函数中用到的外部变量作为封装函数的参数。这样处理好像有点奇怪。
> 感谢李白的提醒。
>
> 2009/11/23 李白,字一日 <calid...@gmail.com>