2017-07-23 4 views
1

Je suis capable de créer 4 infowindow selon la réponse maintenant la tâche est de changer la valeur dans l'infowindow sur le clic d'un bouton qui est dans l'infowindow et le ferme. La valeur change avec succès, mais lorsque l'infowindow est à nouveau ouvert, l'instance antérieure d'infowindow est chargée et non la nouvelle. Je crée le marqueur et l'infowindow dans la boucle $ .each et pendant que le débogage iv a supposé que chaque fois que le marqueur est cliqué, il va à cette boucle $ .each où l'écouteur est attaché et a d'anciennes valeurs. Le problème est l'ouverture d'une nouvelle instance infowindow sur click et ne pas l'avoir chargée à chaque boucle.charger nouvelle infowindow sur changement de valeur

$.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); 
}); 
+0

Pouvez-vous poster du code? Si je me souviens bien, vous ne pouvez avoir qu'une seule instance d'infowindow. –

+0

ont partagé le code. la carte est créée en dehors de $ .each et le contenu d'infowindow a un bouton sur le clic dont la valeur change avec succès mais quand je ferme la fenêtre et clique sur le marqueur encore il va dans le $ .each et ouvre la même vieille infowindow – Archit02

Répondre

0

essayer de créer infoWindow à l'extérieur de chaque boucle de ce type et un code pour créer des mises marqueur à l'intérieur de la fermeture. Je MADE violon travaille pour vous 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); 
}); 


} 
+0

Vlado iv a essayé que ça ne marche pas. je reçois le même résultat – Archit02

+0

Merci Vlado. mais pourtant la même chose. Le problème que je vois est que l'eventlistner est dans la boucle $ .each et l'infowindow utilise les données (contenu) de l'itération de chaque boucle qui n'est pas mise à jour donc toujours les données non mises à jour sont vues. – Archit02

+0

Ensuite, montrez plus de code. Où est définie la variable de contenu. Qu'est-ce qui attend le comportement (résultat)? –

0

Merci pour l'effort vraiment Vlado apprécier.
Je suis en mesure d'obtenir le résultat souhaité en plaçant le code de infowindow dans une nouvelle fonction et en appelant cette fonction dans la boucle $ .each. La fonction prend trois paramètres valeur (contenu), marqueur et carte. au sein de la fonction de création du contenu de chaque appel, le nouveau contenu est défini sur l'infowindow que j'ai déclaré globalement en dehors de chaque boucle. Donc, à chaque clic du bouton, je mets juste à jour la valeur de la variable globale de réponse et j'utilise cette nouvelle valeur dans la fonction pour mettre à jour infowindow.