在价值变化上加载新的信息

时间:2017-07-23 11:34:34

标签: javascript google-maps google-maps-api-3 infowindow

我能够根据响应创建4个infowindow,现在任务是在点击infowindow内的按钮并关闭它时更改infowindow中的值。该值成功更改,但是当再次打开infowindow时,将加载早期的infowindow实例而不是新实例。

我在$ .each循环中创建标记和infowindow,而调试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);
});

2 个答案:

答案 0 :(得分:0)

尝试在每个循环之外创建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);
 });


 }

答案 1 :(得分:0)

感谢Vlado真正感激的努力。
我可以通过将infowindow的代码放在一个新函数中并在$ .each循环中调用该函数来获得所需的结果。该函数采用三个参数值(内容),标记和地图。在每个调用中创建内容的func中,确保将新内容设置为我在每个循环之外全局声明的infowindow。因此,每按一次按钮,我只需更新响应全局变量中的值,并在函数中使用此新值来更新信息窗口。