Google Maps API v3 adding multiple markers w/ info windows w/ custom text

15,419

Solution 1

You need to attach the infowindow to the correct markers. Currently they are all associated with "marker", which doesn't exist (and should cause an error message in the javascript console when you click on the markers).

Inside the click listener change:

infowindow1.open(map, marker);

infowindow2.open(map, marker);

infowindow3.open(map, marker);

To:

infowindow1.open(map, marker1);

infowindow2.open(map, marker2);

infowindow3.open(map, marker3);

working example

Solution 2

In addition to HoangHieu Answer when you use for loop it better to use it this way:

marker.info = new google.maps.InfoWindow({
  content: 'some text'
});

google.maps.event.addListener(marker, 'click', function() {
  this.info.open(map, this);
});

Solution 3

 google.maps.event.addListener(marker1, 'click', function() {
    // Calling the open method of the infoWindow
    infowindow1.open(map, marker);
    });

change to

 google.maps.event.addListener(marker1, 'click', function() {
    // Calling the open method of the infoWindow
    infowindow1.open(map, this);
 });
Share:
15,419
Nader S
Author by

Nader S

Updated on June 09, 2022

Comments

  • Nader S
    Nader S almost 2 years

    I am making a website over cyclists killed in Norway. For my project I have been using google maps api v3, but I have vague familiarity with javascript. You can see my result so far here: http://salamatstudios.com/googlemapstest/

    Basicly I want to have multiple markers with infowindows on each one. Each one of the infowindows will contain: Name (age), Location, Date of death, Read more (which will be linked to a page on the website itself).

    Like this example here: http://salamatstudios.com/bicycles/

    I tried working with just one marker and infowindow and that worked just fine. When I want to add new markers with custom info windows on each I get stuck. At the moment I have 3 markers on different locations as seen in the first link, but none of the info windows appear when I click the marker..

    How do I go around it to code it so the infowindows appear? And how can I have custom text in every infowindow? I am going to have about 30-40 markers on the map when it is done. All of the info windows will have different types of information.

    function initialize() {
        var mapOptions = {
          center: new google.maps.LatLng(65.18303, 20.47852),
          zoom: 5,
          mapTypeId: google.maps.MapTypeId.ROADMAP,
    
    
          // MAP CONTROLS (START)
          mapTypeControl: true,
    
          panControl: true,
          panControlOptions: {
          position: google.maps.ControlPosition.TOP_RIGHT
          },
    
          zoomControl: true,
          zoomControlOptions: {
          style: google.maps.ZoomControlStyle.LARGE,
          position: google.maps.ControlPosition.LEFT_TOP
          },
    
          streetViewControl: true,
          streetViewControlOptions: {
          position: google.maps.ControlPosition.LEFT_TOP
          },
          // MAP CONTROLS (END)
    
    
    
        };
        var map = new google.maps.Map(document.getElementById("map"),
            mapOptions);
    
    
        // -------------- MARKER 1
        var marker1 = new google.maps.Marker({
        position: new google.maps.LatLng(59.96384, 11.04120),
        map: map,
        icon: 'img/bike5.png'
        });
    
    
        // MARKER 1'S INFO WINDOW
        var infowindow1 = new google.maps.InfoWindow({
        content: 'Name<br />Location<br />Date<br /><br /><a href="http://www.db.no" target="_blank">Read more(test link)</a>'
        });
        // End of infowindow code
    
        // Adding a click event to the marker
        google.maps.event.addListener(marker1, 'click', function() {
        // Calling the open method of the infoWindow
        infowindow1.open(map, marker);
        });
        // -------- END OF 1st MARKER
    
    
        // -------------- MARKER 2
        var marker2 = new google.maps.Marker({
        position: new google.maps.LatLng(60.63040, 8.56102),
        map: map,
        icon: 'img/bike5.png'
        });
    
        // MARKER 2'S INFO WINDOW
        var infowindow2 = new google.maps.InfoWindow({
        content: 'Name<br />Location<br />Date<br /><br /><a href="http://www.db.no" target="_blank">Read more(test link)</a>'
        });
        // End of infowindow code
    
        // Adding a click event to the marker
        google.maps.event.addListener(marker2, 'click', function() {
        // Calling the open method of the infoWindow
        infowindow2.open(map, marker);
        });
        // -------- END OF 2nd MARKER
    
    
        // -------------- MARKER 3
        var marker3 = new google.maps.Marker({
        position: new google.maps.LatLng(60.39126, 5.32205),
        map: map,
        icon: 'img/bike5.png'
        });
    
        // MARKER 3'S INFO WINDOW
        var infowindow3 = new google.maps.InfoWindow({
        content: 'Name<br />Location<br />Date<br /><br /><a href="http://www.db.no" target="_blank">Read more(test link)</a>'
        });
        // End of infowindow code
    
        // Adding a click event to the marker
        google.maps.event.addListener(marker3, 'click', function() {
        // Calling the open method of the infoWindow
        infowindow3.open(map, marker);
        });
        // -------- END OF 3rd MARKER
    
    
      }
      google.maps.event.addDomListener(window, 'load', initialize);
    

    Would be great if some could give me a clue. I've tried searching around a bit, but I can't really find my answer. Thanks in advance! :-)