2

我的地图标记上有一个点击事件来创建一个信息窗口,我正在尝试对地址进行地理编码以显示在信息窗口内。

            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;
                }

       });
}

问题是地理编码地址总是一个标记点​​击后面。例如,我可能会单击伦敦的一个标记,但没有任何反应。所以我再次点击它,我得到了带有地址的信息窗口。然后我点击曼彻斯特的一个标记,我仍然看到伦敦地址,然后我点击利物浦的一个标记,我得到曼彻斯特地址。等等。

任何人都可以发现错误吗?

来自 SEAN 的更新工作解决方案 在回调中添加了信息窗口代码

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

 });

}

4

1 回答 1

1

这看起来不像标准的 Google Maps JavaScript v3 代码;是对gmap3jQuery 的引用吗?此外,某些东西似乎没有挂在一起 -getAddress函数返回content,但addInfoWindow函数中的代码似乎没有使用该值。

但听起来你的问题的根源可能在于函数callback内的代码方面getAddress;当在该调用之后的代码运行时,您无法确定回调是否已完成addInfoWindow。听起来可能会发生以下情况:

  1. addInfoWindow函数被调用
  2. 从函数内部addInfoWindow调用getAddress
  3. getAddress快速运行并完成,将控制权返回给addInfoWindow函数,但回调尚未运行
  4. 代码第一次运行时,content还没有构建(因为回调还没有运行),所以什么都没有显示
  5. addInfoWindow函数返回后,getAddress回调运行,因为收到了响应,这建立了content
  6. addInfoWindow再次调用,以相同的方式运行,但这次它使用上次回调后设置的内容,因此它使用的content是上一次运行的
  7. 场景只是重复,重复,重复

您的问题有一些令人困惑的部分,如果无法添加对代码的调用或查看代码运行,这有点难以确定alert,但听起来您的代码很可能遵循我上面描述的步骤或非常类似的步骤.

如果这听起来适合您的问题,最直接的解决方法是将InfoWindow显示代码与回调代码一起放入。这样,您就知道内容已经设置好了,因为回调会在响应返回时运行。

于 2012-06-27T12:12:18.520 回答