关闭google map的infowindow.open(map)异步行为

时间:2014-05-22 15:12:28

标签: javascript jquery google-maps asynchronous

我有一个谷歌地图应用程序,点击地图上的某个区域会创建信息窗口。

这是我的代码的结构:

...
var infowindow = new google.maps.InfoWindow();
google.maps.event.addListener(MapArea, "click", showTB);


function showTB () {
    ...
    contentElement = //complicated table with buttons etc

    infowindow.setContent(sContentString);
    infowindow.setPosition(event.latLng);
    infowindow.open(map);

    //contentElement dom element manipulations, such as:
    $("#table_row").css({background: "#8af"});
}

这里的问题是最后的dom元素操作通常不会执行。我的猜测是infowindow.open(map)是异步的,它通常只在dom元素操作部分之后完成执行,因为html元素还不存在而不执行。 在infowindow.open(map)之后放置一个警告语句会导致最后一段代码通常执行,假设是由于延迟造成的。

那么如何才能确保任何代码仅在infowindow.open()完成执行后才执行? 我可以让它同步吗? 还有另一种方法吗?我不只是想添加一个延迟函数,因为它会非常慢或不可靠。

1 个答案:

答案 0 :(得分:4)

等待' domready' infowindow

上的活动
  

domready |没有|包含InfoWindow内容时会触发此事件   附加到DOM。如果您正在构建您的活动,您可能希望监控此事件   信息窗口内容动态。

代码:

infowindow.setContent(sContentString);
infowindow.setPosition(event.latLng);
infowindow.open(map);
google.maps.event.addListener(infowindow,'domready', function() {
  //contentElement dom element manipulations, such as:
  $("#table_row").css({background: "#8af"});
});