gmap3在infowindow中显示地址

时间:2012-06-27 11:10:48

标签: javascript jquery google-maps google-maps-api-3

我在地图标记上有一个点击事件来创建一个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

 });

}

1 个答案:

答案 0 :(得分:1)

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

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

  1. addInfoWindow函数被称为
  2. addInfoWindowgetAddress函数称为
  3. getAddress运行并快速完成,将控制权返回给addInfoWindow函数,但回调尚未运行
  4. 第一次运行代码时,content尚未构建(因为回调尚未运行),因此未显示任何内容
  5. 在返回addInfoWindow函数后,getAddress回调会运行,因为收到了响应,从而建立了content
  6. 再次调用
  7. addInfoWindow,运行方式相同,但这次它使用的是上次回调后设置的内容,因此它使用的是上次运行中的content
  8. 该场景重复,重复,重复
  9. 您的问题有一些令人困惑的部分,如果不能在代码中添加alert调用或查看代码运行,确实有点难以确定,但很可能您的代码遵循了我在上面描述的步骤或类似的东西。

    如果它听起来符合您的问题,最直接的解决方法是将InfoWindow显示代码放入回调代码中。这样,您就知道已经设置了内容,因为回调时会返回回调。