我可以根据响应创建 4 个信息窗口,现在的任务是通过单击信息窗口内的按钮来更改信息窗口内的值并将其关闭。该值成功更改,但是当再次打开信息窗口时,会加载较早的信息窗口实例,而不是新实例。
我在 $.each 循环中创建标记和信息窗口,而 debug iv 发现每当单击标记时,它都会转到附加监听器并具有旧值的 $.each 循环。问题是单击时打开一个新的 infowindow 实例,但没有在每个循环中加载它。
$.each(obj,function(i,value){
var eventmarker = new google.maps.Marker;
eventmarker.setPosition(new google.maps.LatLng(parseFloat(value.Latitude),parseFloat(value.Longitude)));
eventmarker.setMap(mymapper);
listener = eventmarker.addListener("click",function(){
infoWindow = new google.maps.InfoWindow;
var content = value;
infoWindow.setContent(content);
infoWindow.open(mymapper,eventmarker);
});
最佳答案
尝试像这样在每个循环之外创建 infoWindow
,并将用于创建标记的代码放在闭包内。
我为你做了工作 fiddle :
http://jsfiddle.net/6973rbL8/
function initialize() {
var myOptions = {
center: new google.maps.LatLng(16,15),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var myMapper = new google.maps.Map(document.getElementById("default"),
myOptions);
var infowindow = new google.maps.InfoWindow();
var obj=[{Latitude:16,Longitude:15},{Latitude:16,Longitude:14},
{Latitude:16,Longitude:1}]
$.each(obj,function(i,value){
var eventmarker = new google.maps.Marker;
eventmarker.setPosition(new
google.maps.LatLng(parseFloat(value.Latitude),parseFloat(value.Longitude)));
eventmarker.setMap(mymapper);
});
}
关于javascript - 在值变化时加载新的信息窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45264605/