javascript - 在值变化时加载新的信息窗口

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

我可以根据响应创建 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/

相关文章:

google-maps-api-3 - 谷歌地图 API V3 : fromContainerPixelToLatLng

javascript - 如何将 "generate"唯一变量?

javascript - Facebook 登录脚本停止工作

javascript - 如何启用谷歌地图 Controller (右,右..等箭头)

javascript - PhoneGap - 按下谷歌地图 "Terms of use"时如何返回?

google-maps-api-3 - Bootstrap轮播中谷歌地图的奇怪渲染

javascript - React js 中常见的 header 问题

javascript - 在位置 X 插入值

javascript - 为什么我的 SVG 组上没有触发 click 事件?

javascript - 谷歌地图错误 : Uncaught InvalidValueError: setIcon: not a string; and no url property; and no path property