0

I was able to pull in my markers from an XML file and place them on a Google Map, but now I want each marker to link to its respective url once clicked. Can someone please let me know what I'm doing wrong? For some reason I'm only getting the last entry's url.

downLoad("phpsqlajax.php", function(data) {
    var xml = data.responseXML;
    var markers = xml.documentElement.getElementsByTagName("marker");
    for (var i = 0; i < markers.length; i++) {
        var city = markers[i].getAttribute("city");
        var state = markers[i].getAttribute("state");
        var country = markers[i].getAttribute("country");
        var markerUrl = markers[i].getAttribute("url");
        var point = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
        var marker = new google.maps.Marker({
            position: point,
            map: googleMap,
            icon: 'map-pin.png',
            url: markerUrl
        });
        google.maps.event.addListener(marker, 'click', function() {
            window.location.href = marker.url;
        });
    }
});
Kara
  • 6,115
  • 16
  • 50
  • 57
user2402492
  • 65
  • 1
  • 2
  • 10

1 Answers1

0

Make a create Marker function like this (not tested):

function createMarker(point, url) {
    var marker = new google.maps.Marker({
        position: point,
        map: googleMap,
        icon: 'map-pin.png',
        url: markerUrl
    });
    google.maps.event.addListener(marker, 'click', function() {
        window.location.href = marker.url;
    });
}

Then call it like this:

downLoad("phpsqlajax.php", function(data) {
    var xml = data.responseXML;
    var markers = xml.documentElement.getElementsByTagName("marker");
    for (var i = 0; i < markers.length; i++) {
        var city = markers[i].getAttribute("city");
        var state = markers[i].getAttribute("state");
        var country = markers[i].getAttribute("country");
        var markerUrl = markers[i].getAttribute("url");
        var point = new google.maps.LatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
        createMarker(point, markerUrl);
    }
});
geocodezip
  • 158,664
  • 13
  • 220
  • 245
  • Thank You, that worked like a charm! Is there anyway you can explain to me why that worked? – user2402492 May 20 '13 at 22:02
  • [Mike Williams' explanation of javascript function closure from his Google Maps Javascript API v2 tutorial](http://econym.org.uk/gmap/closure.htm) – geocodezip May 20 '13 at 22:40