2010-12-10 33 views
0

Ich arbeite gerade an einem ASP.NET-Projekt, bei dem ich die Google Maps-API verwende, um eine Markierung für jedes Unternehmen anzuzeigen, das in der Datenbank registriert ist.JavaScript Google map marker bug

Alles funktioniert gut, aber wenn ich auf eine Markierung klicke, erscheint immer die Tooltip/Dialogbox für die letzte Firma in meiner Firmenliste und nicht die aktuelle Firmenmarke, auf die geklickt wurde.

Ich kann nicht wirklich verstehen, warum es immer der letzte Marker ist, der auftaucht. Hier ist mein aktualisiert Code:

JavaScript.Text = @"<script type='text/javascript'> 
        function load() { 
        if (GBrowserIsCompatible()) { 
        var map = new GMap2(document.getElementById('map')); 
        map.setCenter(new GLatLng(56.4, 10.57983), 9); 
        map.enableScrollWheelZoom(); 

        } 
       } 
     </script> "; 

    foreach (MemberProfile m in relatedMembers) 
    { 
     XmlDocument doc = new XmlDocument(); 

     string address = m.Address; 
     string zip = m.Zip; 
     string city = m.City; 
     string navn = m.Name; 
     string tlf = m.Phone; 

     doc.Load("http://maps.googleapis.com/maps/api/geocode/xml?address=" + zip + "+" + city + "+" + address + "+DK&sensor=true&key=ABQIAAAAEaY4JLb9fZFGMlDKuMUlWBRSvyGIkBO7X03pzlT7Z30EPXHR8BS0rXL_ShFm2gc79lZTw2Zak88wng"); 

     XmlNode latNode = doc.SelectSingleNode("GeocodeResponse/result/geometry/location/lat/text()"); 
     XmlNode lonNode = doc.SelectSingleNode("GeocodeResponse/result/geometry/location/lng/text()"); 

     if (latNode != null && lonNode != null) 
     { 
      JSAddMarkers.Text += @"<script type='text/javascript'> 
           var marker = new GMarker(new GLatLng(" + latNode.Value + "," + lonNode.Value + ")); " 
          + "var html = '<b>" + navn + "</b><br />" + address + "<br /> " + zip + " " + city + "<br />" + tlf + "'; " + "GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); });" 
          + "map.addOverlay(marker);" 
          + "</script>"; 
     } 

Wenn einer von euch da draußen, den Grund erkennen, warum, würde ich mich freuen, von Ihnen zu hören! Jede Hilfe/Hinweis ist willkommen :-)

alles Gute,

Bo

+0

Ich denke, der Fehler in der Reihenfolge ist Karte Aufgabe Erstellen und Hinzufügen von Markern auf es. Sie sollten zuerst das Kartenobjekt erstellen und dann die Schleife ausführen, um Markierungen hinzuzufügen. –

+0

Hmm, ich denke du hast Recht! Ich werde meinen ersten Beitrag mit meinem neuen Code aktualisieren, bei dem ich die Erstellung der Karte über die foreach-Schleife verschoben habe. Es gibt keine Markierungen auf der Karte obwohl:/Vermutlich etwas auf der Straße verpasst haben .. – bomortensen

+0

Immer noch keine Lösung gefunden :(Ich habe versucht, meinen Code viel zu refaktorieren, so dass es ein Snippet mit allen ausgibt Die Markierungen hinzugefügt. Es zeigt immer noch nur die letzte Markierung für jeden Punkt ist. Jeder? – bomortensen

Antwort

0

versuchen diese

var point =new GLatLng(" + latNode.Value + "," + lonNode.Value + "); 
var marker = createMarker(point, address,zip,city,navn); 
map.addOverlay(marker); 



function createMarker(point, address, zip,city, navn) { 
     var marker = new GMarker(point, customIcons[type]); 
     var html = "Address:<b style='padding-left:6px'>" + address+ "</b><br/>zip:<b style='padding-left:6px'>"+ zip+ "</b><br/>city:<b style='padding-left:6px'>"+ city+ "</b>"; 
     GEvent.addListener(marker, 'mouseover', function() { 
     marker.openInfoWindowHtml(html); 
     }); 
     GEvent.addListener(marker, "mouseout", function() { 
       marker.closeInfoWindow(); 
    }); 
     return marker; 
    } 
+0

Hallo Bhanu, das ist definitiv auch eine Möglichkeit, es zu tun.Aber da ich mit Javascript Ninja-Codierung in C# Codebehind arbeite, scheint es wie ich habe ein kleines Problem, um deinen Code zur Arbeit zu bringen:/Arbeite nie wirklich mit Javascript in CodeBehind vorher, also ertragen Sie mit mir .. – bomortensen