我有一个谷歌地图应用程序,点击地图上的某个区域会创建信息窗口。
这是我的代码的结构:
...
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()
完成执行后才执行?
我可以让它同步吗?
还有另一种方法吗?我不只是想添加一个延迟函数,因为它会非常慢或不可靠。
答案 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"});
});