style personalizar open multiple infowindows google example automatically javascript google-maps-api-3 google-maps-markers infowindow

javascript - personalizar - multiple infowindows google maps



Cómo crear múltiples infowindow en google map api (1)

Creo 3 marcadores en el mapa, cuyos datos provienen de un json. pero cuando hago clic en un marcador e intento abrir la ventana de Información, solo el último marcador responderá correctamente. Por favor, ayúdenme ... este es el código ...

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script> <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script> <script src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer.js" type="text/javascript"></script> </head> <body> <script> var json = [ { "title": "Stockholm", "lat": 59.3, "lng": 18.1, "description": "Stockholm is the capital and the largest city of Sweden and constitutes the most populated urban area in Scandinavia with a population of 2.1 million in the metropolitan area (2010)" }, { "title": "Oslo", "lat": 59.9, "lng": 10.8, "description": "Oslo is a municipality, and the capital and most populous city of Norway with a metropolitan population of 1,442,318 (as of 2010)." }, { "title": "Copenhagen", "lat": 55.7, "lng": 12.6, "description": "Copenhagen is the capital of Denmark and its most populous city, with a metropolitan population of 1,931,467 (as of 1 January 2012)." } ] var myCenter=new google.maps.LatLng(51.508742,-0.120850); function initialize() { var mapProp = { center:myCenter, zoom:5, mapTypeId:google.maps.MapTypeId.ROADMAP }; var map=new google.maps.Map(document.getElementById("googleMap"),mapProp); for (var i = 0, length = json.length; i < length; i++) { var data=json[i]; var latLng = new google.maps.LatLng(data.lat, data.lng); // Creating a marker and putting it on the map var marker = new google.maps.Marker({ position: latLng, map: map, title: data.title }); } var infowindow = new google.maps.InfoWindow({ content: data.description }); google.maps.event.addListener(marker, ''click'', function() { infowindow.open(map,marker); }); } google.maps.event.addDomListener(window, ''load'', initialize); </script> <div id="googleMap" style="width:100%;height:100%;"></div> </body> </html>


El problema es si intentas asignar contenido a la ventana de información dentro de un bucle. Luego, cuando haces clic en el marcador, solo conoce el contenido de la última iteración del ciclo. Necesitas un cierre en su lugar. Hay dos maneras diferentes de manejar esto, así es cómo lo hago generalmente:

function initialize() { var mapProp = { center:myCenter, zoom:5, mapTypeId:google.maps.MapTypeId.ROADMAP }; var map=new google.maps.Map(document.getElementById("googleMap"),mapProp); var infowindow = new google.maps.InfoWindow({ content: "" }); for (var i = 0, length = json.length; i < length; i++) { var data=json[i]; var latLng = new google.maps.LatLng(data.lat, data.lng); // Creating a marker and putting it on the map var marker = new google.maps.Marker({ position: latLng, map: map, title: data.title }); bindInfoWindow(marker, map, infowindow, data.description); } } function bindInfoWindow(marker, map, infowindow, description) { marker.addListener(''click'', function() { infowindow.setContent(description); infowindow.open(map, this); }); }