Ich habe mehrere Polylinien auf einer Google Map und fügen Sie einen 'click' Event-Handler für jede. All diese Polylinien werden über JavaScript-Code hinzugefügt. Wenn ich jedoch auf eine beliebige Polylinie in der Karte klicke, wird das Klickereignis für die zuletzt hinzugefügte Polylinie ausgelöst. Dies macht es schwierig, die angeklickte Linie zu identifizieren.Falsche Polylinie Klicken gefeuert, wenn mehrere Polylinien auf der Karte
Der Code, der die Polylinien erstellt ist:
$.ajax({
type: "GET",
url: "MapData.html",
success: function (json) {
mapData = JSON.parse(json);
var newroad;
for (var i = 0; i < mapData.length; i++) {
newroad = new google.maps.Polyline({
ID: mapData[i].ID,
path: google.maps.geometry.encoding.decodePath(mapData[i].latLngs),
strokeColor: 'blue',
strokeOpacity: 0.75,
strokeWeight: 3
});
newroad.setMap(map);
google.maps.event.addListener(newroad, 'click', function() {
setSelectedRoad(newroad);
});
}
},
error: function() {
alert('Critical Data Failure');
}
});
Die Daten sind korrekt abgerufen von dem Server und alle Polylinien werden in Blau angezeigt, wie erwartet. Die Funktion, die aufgerufen wird, wenn eine Polylinie geklickt wird, ist
function setSelectedRoad(road) {
road.strokeColor = 'black';
road.setOptions({ strokeColor: 'black', strokeOpacity: 1.0 });
selectedRoadID = road.ID;
}
jedoch die „selectedRoadID“ immer die letzte Polylinie hinzugefügt werden, stellt sich heraus, und die Farbe für diese Linie in Schwarz geändert, auch wenn andere Polylinie geklickt wird.
Der verwirrende Teil ist, dass, wenn ich eine frische Polylinie auf der Karte zeichne und das click-Ereignis auf die gleiche Funktion setze, dann funktioniert das richtig. Ich bekomme die richtige ID für die angeklickte Polylinie. Dies funktioniert für beliebig viele neue Linien und funktioniert ordnungsgemäß, um sie in beliebiger Reihenfolge anzuklicken.