在循环中创建标记-在单击侦听器时,信息窗口不会打开
creating markers in loop - Infowindow does not open when inside an click Listener
我有一个带有多个标记的谷歌地图,每个标记都有自己的信息窗口。
当我点击时什么也没发生。提示:我知道监听器是否触发,因为我之前确实在它里面放了一个警报,它起作用了。
问题代码是:
google.maps.event.addListener(point[i], 'click', function() {
infowindow[i] = new google.maps.InfoWindow({content: contentString[i] });
infowindow[i].open(map,point[i]);
});
如果我只做
infowindow[i] = new google.maps.InfoWindow({content: contentString[i] });
infowindow[i].open(map,point[i]);
它的工作原理。但不在我的addListener函数中。我猜这是谷歌地图不喜欢的东西,但是firebug给了我0个错误。
我真的需要你的帮助。非常感谢!这是因为你可能在循环中有闭包!因此,在回调调用时,回调中的变量i
已经被覆盖。您有两种方法来修复它:
1)经典的"闭包在循环中"的解决方法(你为每一个循环迭代做另一个闭包):
for (i = 0; i < 20; i++) { (function (i) {
google.maps.event.addListener(point[i], 'click', function() {
infowindow[i] = new google.maps.InfoWindow({content: contentString[i] });
infowindow[i].open(map,point[i]);
});
})(i);
}
2)避免闭包并使用标记数据结构:
for (i = 0; i < 20; i++) {
point[i].i = i;
google.maps.event.addListener(point[i], 'click', function() {
this.myinfowindow = new google.maps.InfoWindow({content: contentString[this.i] });
this.myinfowindow.open(map, this);
});
}
(或者您也可以将contentString移动到标记:point[i].contentString = ...
并在单击处理程序中使用this.contentString
)。那么您就不需要point[i].i
属性了。)
我个人更喜欢第二种解决方案,因为闭包消耗内存等
我也有同样的问题,它与循环有关,因为当我使用像这样的硬编码值时,它们确实有效:
// Add infowindow
google.maps.event.addListener(markers[0], 'click', function() {
infowindows[0].open(map,markers[0]);
});
// Add infowindow
google.maps.event.addListener(markers[1], 'click', function() {
infowindows[1].open(map,markers[1]);
});
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 定义完全独立的样式信息
- 使用html2canvas获取基本信息
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 从信息框调用弹出图像库
- 如何在不传递此信息的情况下查找被调用的元素
- 将谷歌自动完成地址信息放在页面上,而不是表格中
- 如何通过解析类信息来使用jQuery创建类
- 包含数据库中相关信息的开放模态
- 单击按钮即可在浏览器的新选项卡中打开 Sapui5 详细信息页面
- 如何调整信息窗口的大小并点击按钮?+更改信息窗口的内容
- ng在更新$scope后重复不更新信息
- 谷歌地图点击潜水触发信息窗口
- 根据CHECKBOX输入值动态更新DIV信息
- 如何使用ember.js在操作中传递当前上下文中目标旁边的信息
- Jquery on单击“显示信息”
- 将FlowPlayer嵌入谷歌地图信息窗口
- AEM(cq5)使用组件内的信息
- 如何在完整日历中的当天点击时显示活动详细信息
- 使用javascript后台脚本获取Yotutube频道信息