我现在可以根据响应创建4个信息窗口,现在的任务是单击信息窗口中的按钮并关闭它,以更改信息窗口中的值。值成功更改,但是再次打开信息窗口时,将加载较早的信息窗口实例,而不是新实例。

我在$ .each循环中创建了标记和信息窗口,而在调试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,然后将用于创建标记的代码放在闭包内部。
我为您制作了小提琴:
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/

10-11 15:00