Merkblatt .addLayer() nicht in Funktion, funktioniert auf der Konsole
Ich denke, das bedeutet, ich bin fehlt etwas grundlegendes über die Arbeit von verschachtelten Funktionen in javascript, aber ich versage hinzufügen oder entfernen einer Ebene aus einer leaflet-Karte über eine Klick-Funktion. Speziell, ich habe ein Faltblatt Karte mit zahlreichen Vektor-Ebenen definiert. Eine dieser Schichten ist Hinzugefügt, um die Karte beim laden der Seite, und dann die folgenden Schichten werden soll, um die Belastung auf ein click-Ereignis in einem layer-selector.
Hier ist die Funktion, dass die Griffe klicken, dann aktualisiert die sidebar Legende, updates Klassen in der layer-Auswahl und soll update der sichtbaren Ebene:
//ADD THE LAYER CONTROL FUNCTION
$('.layer').click(function() {
var oldLayer = $('.active').attr('id');
var newLayer = $(this).attr('id');
console.log(oldLayer + ' --> ' + newLayer);
$('#infobits').html('<h2>' + this.text + '</h2><hr>' + legendFormatter(
this.id));
map.removeLayer(oldLayer);
$('.layer').removeClass('active');
$(this).addClass('active');
map.addLayer(newLayer);
});
Jedes mal, wenn ich Sie auf eine neue Ebene bekomme ich Uncaught TypeError: undefined is not a function
, egal wo ich die Funktion (ich hatte es sogar innerhalb der .getJSON () - Aufruf für ein bit). Was ist verwirrend ist, dass ist ich gehe in die JS-Konsole in meinem browser und geben Sie verbatim, was die Funktion ist, die auf der Linie 49 der oben genannten Skript (map.removeLayer(Percent_TC_bg)
), wird die Karte entfernt die Ebene in Frage stellen.
Was kann ich tun, um meine Karte hinzufügen und entfernen von Schichten ohne Fehler?
- Uncaught TypeError: undefined ist nicht eine Funktion bedeutet, dass der moment, die Zeile ausgeführt wird, in code, Karte ist undefined/null. Debuggen und überprüfen.
map
ist komplett verfügbar in der Funktion. Protokollierungconsole.log(map.getCenter());
eine Zeile vormap.removeLayer(oldLayer)
produziert die erwarteten Koordinaten. Völlig überfragt.- Ist die Karte irgendwo Leben?
- Ich legte es auf hier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehme ich an
TypeError
wird geworfen insideaddLayer
oderremoveLayer
.Map#addLayer
und#removeLayer
akzeptiertILayer
- Objekt als parameter, aberoldLayer
undnewLayer
ist offensichtlichString
, die kam direkt von einem HTML-element die ID-Eigenschaft.So ändern
oldLayer
undnewLayer
zu schätzenILayer
Objekt wird das problem lösen, denke ich.ILayer
statt einem string?Edit: Igor mich zu schlagen.
Mikrofonen ist richtig - das HTML-element die ID ist ein string, und nicht auf der Ebene. Sie konnte etwas tun, wie dies nach dem definieren der Schichten um dieses Problem zu umgehen:
Und fügen Sie den handler wie so
eval()
die id des div, aber das wäre mehr verpönt. Beim speichern werden die Namen der JS-Variablen als ids von DOM-Elementen, es ist ziemlich üblich, zum speichern von verweisen in ein Objekt.