在一个循环中生成一个标记数组,并为它们分配不同的弹出窗口
Generate an array of markers in one loop and assign different popup to all of them
我从JSON字符串加载一个标记数组。JSON字符串包含需要在每个标记的弹出窗口中显示的标记位置和信息。
我有以下代码function AddAllMarkers(markersJSON){
var tempArray = JSON.parse(markersJSON);
infoWindow = new google.maps.InfoWindow();
for(var i = 0; i < tempArray.Locations.length; i++){
var obj = tempArray.Locations[i];
var point = new google.maps.LatLng(obj.Latitude, obj.Longitude);
var contentString = <!--CONTENT STRING GETS SET HERE PER MARKER-->;
var markerTemp = new google.maps.Marker({
position: point,
icon:obj.Icon
});
google.maps.event.addListener(markerTemp, 'click', function() {
infoWindow.close();
infoWindow = new google.maps.InfoWindow();
infoWindow.setContent(contentString);
infoWindow.open(map, this);
});
markerArray.push(markerTemp);
}
}
当这个函数被调用时,我正确地加载了所有的标记,但是所有的标记都显示了最后加载的标记的弹出。我做错了什么?我确实尝试过移动infoWindow的声明,但要么不能解决问题,要么会导致多个气球同时打开。
我该如何解决这个问题?
观察到这种行为的原因是,在事件侦听器函数执行的时候——也就是鼠标单击的时候——循环已经完成。因此,contentString
变量将保存上次循环迭代的值。
作为一种解决方法,您可以将内容字符串附加到标记本身,并使用事件处理程序中的this
引用访问它。
function AddAllMarkers(markersJSON){
var tempArray = JSON.parse(markersJSON);
infoWindow = new google.maps.InfoWindow();
for(var i = 0; i < tempArray.Locations.length; i++){
var obj = tempArray.Locations[i];
var point = new google.maps.LatLng(obj.Latitude, obj.Longitude);
var contentString = <!--CONTENT STRING GETS SET HERE PER MARKER-->
var markerTemp = new google.maps.Marker({
position: point,
icon:obj.Icon
});
markerTemp.contentString = contentString;
google.maps.event.addListener(markerTemp, 'click', function() {
infoWindow.close();
infoWindow = new google.maps.InfoWindow();
infoWindow.setContent(this.contentString);
infoWindow.open(map, this);
});
markerArray.push(markerTemp);
}
}
相关文章:
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 将节点数据分配给另一个变量jstree
- '这'在使用之前分配给了一个var
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 使用一个表达式将两个变量分配给相同的值
- 在javascript中获取servlet值,并使用ajax将该值分配给一个文本框
- 为什么在Javascript中将一个对象分配给另一个变量也会更改初始对象
- 仅将 CSS 规则应用于
中的第一个 ,而不分配类/ID - 为什么我们被教导将document.getElementById(“id”)分配给一个变量,然后将该变量与属性一起使用
- 多个图像显示带有动态创建的画布的最后一个图像并分配给图像
- 如何在javascript中将变量的值分配给另一个方法
- 使用 JQuery 从另一个元素的 id 为图像分配属性
- 可以't分配给一个对象数组javascript
- 在jquery中创建和分配一个css类
- 在getJSON函数中分配一个变量
- 编写一个代码来拆分字符串“test”,并将Name的值分配给文本框,将ok的值分配到复选框
- 如何将行数计数分配给另一个值,该值稍后可在Protractor中的测试用例中使用
- ExtJS:为存储中的数据分配一个变量
- JavaScript 创建一个随机表生成器并为单元格分配颜色
- 我可以使用一个函数来帮助分配和验证作为对象传递的属性吗