Javascript 值更改时加载新信息窗口

Javascript 值更改时加载新信息窗口,javascript,google-maps,google-maps-api-3,infowindow,Javascript,Google Maps,Google Maps Api 3,Infowindow,我能够根据响应创建4个infowindow,现在的任务是单击infowindow中的按钮更改infowindow中的值并关闭它。该值已成功更改,但当再次打开infowindow时,将加载infowindow的早期实例,而不是新实例 我在$each循环中创建marker和infowindow,而debug iv则认为每当单击marker时,它都会转到这个$each循环,侦听器在其中被附加并具有旧值。问题是在单击时打开一个新的infowindow实例,而不是在每个循环中加载它 $.each(obj,

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

我在$each循环中创建marker和infowindow,而debug iv则认为每当单击marker时,它都会转到这个$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
,并将用于创建标记的代码放在闭包内部。 我为你做了工作小提琴:


尝试像这样在每个循环外部创建
infoWindow
,并将用于创建标记的代码放在闭包内部。 我为你做了工作小提琴:


谢谢你的努力,我真的很感激。

我可以通过将infowindow的代码放在一个新函数中,并在$.each循环中调用该函数来获得所需的结果。该函数采用三个参数值(内容)、标记和映射。在func中,在每次调用时创建内容可以确保将新内容设置为infowindow,我在each循环外部全局声明了infowindow。因此,每次单击按钮,我都会更新响应全局变量中的值,并在更新信息窗口的函数中使用这个新的val。

感谢您的努力,Vlado非常感谢。

我可以通过将infowindow的代码放在一个新函数中,并在$.each循环中调用该函数来获得所需的结果。该函数采用三个参数值(内容)、标记和映射。在func中,在每次调用时创建内容可以确保将新内容设置为infowindow,我在each循环外部全局声明了infowindow。因此,每次单击按钮,我都会更新响应全局变量中的值,并在更新信息窗口的函数中使用这个新的val。

您能发布一些代码吗?如果我没记错的话,您将只能有一个infowindow.com的实例。我已经共享了代码。地图是在$之外创建的。每个和infowindow内容都有一个单击按钮,其值会成功更改,但当我关闭窗口并再次单击标记时,它会进入$。每个都会打开相同的旧infowindow。您可以发布一些代码吗?如果我没记错的话,您将只能有一个infowindow.com的实例。我已经共享了代码。地图是在$之外创建的。每个和infowindow内容都有一个单击按钮,其值会成功更改,但当我关闭窗口并再次单击标记时,它会进入$。每个都会打开相同的旧infowindow。Vlado iv尝试过它不起作用。i、 我也得到了同样的结果。但还是一样。我看到的问题是eventlistner在$内。每个循环和infowindow都使用每个循环迭代的数据(内容),但这些数据并没有更新,所以总是可以看到未更新的数据。然后显示更多代码。其中定义了内容变量。预期的行为(结果)是什么?不,我错了,事实并非如此。我尝试在单击按钮后手动更新内容字段,但它没有检查是否加载在首次单击事件期间创建的具有旧值的实例。我在for each循环的迭代帮助下,在for each中动态创建内容值,并将所有4个响应值迭代放置到infowindow中。我有一个字段,在每次单击该按钮时都要减去该字段。假设在加载时,第一次单击时的值是10,然后应该是9,然后是8,7等等,直到6。如果我没有用close按钮关闭infowindow,每次单击时值都会改变,但是当我用close按钮或通过其close()关闭infowindow时方法并通过单击标记重新打开,我得到第一个值,即10,只有再次单击按钮后,我才能看到最新值减去1,即5。没有Vlado iv尝试它不起作用。i、 我也得到了同样的结果。但还是一样。我看到的问题是eventlistner在$内。每个循环和infowindow都使用每个循环迭代的数据(内容),但这些数据并没有更新,所以总是可以看到未更新的数据。然后显示更多代码。其中定义了内容变量。预期的行为(结果)是什么?不,我错了,事实并非如此。我尝试在单击按钮后手动更新内容字段,但它没有检查是否加载在首次单击事件期间创建的具有旧值的实例。我在for each循环的迭代帮助下,在for each中动态创建内容值,并将所有4个响应值迭代放置到infowindow中。我有一个字段,在每次单击该按钮时都要减去该字段。假设在加载时,第一次单击时的值是10,然后应该是9,然后是8,7等等,直到6。如果我没有用“关闭”按钮关闭信息窗口,每次单击时,值都会发生变化,但是当我用“关闭”按钮或其close()方法关闭信息窗口并通过单击标记重新打开时,我会得到第一个值,即10,只有再次单击按钮后,我才能看到减去1的最新值,即5
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);
 });


 }