2013-06-04 5 views
30
var map = L.map('map'); 
var marker = L.marker([10.496093,-66.881935]).on('click', onClick); 
function onClick(e) {alert(e.latlng);} 
marker.addTo(map) 

Wenn ich in der Markierung klicken Sie die Warnmeldung wird: undefinedMarker in Faltblatt, klicken Ereignis

Aber wenn ich es in der Variablen Karte setzen, es funktioniert! (zeigt Längen- und Breitengrade)

map.on('click', onClick); 

Weiß jemand, warum es nicht im Marker funktioniert?

+1

Ist 'var marker = L.marker ([10.496093, -66.881935]). On ('klicken', funciton (e) {alarm (e.latlng);});' die gleichen Ergebnisse liefern? – asifrc

+0

Ich habe die Änderung vorgenommen, die Sie erwähnt haben, funktioniert aber nicht –

+1

Wenn Sie dem Beitrag von Chris unten folgen, können Sie Ihren Code als 'var marker = L.marker ([10.496093, -66.881935]) ändern. AddTo (map) .on ('click', onClick); ' – Ayush

Antwort

12

fand ich die Lösung:

function onClick(e) {alert(this.getLatLng());} 

verwendet, um das Verfahren getLatLng() des Markers

+9

vielleicht könnten Sie eine Geige dafür erstellen? es gibt keine klare Dokumentation darüber, wie man Click-Events den Markern – snowgage

35

Die obige Antwort ist richtig und das zu Recht angenommen. Allerdings brauchte ich ähnlich wie bei @snowgage ein bisschen mehr Klarheit, also falls jemand anderes es auch tut:

Leaflet erlaubt Ereignisse auf praktisch alles, was Sie auf seiner Karte tun. In diesem Fall eine Markierung.

Sie also könnte schaffen eine Markierung pro Frage oben:

L.marker([10.496093,-66.881935]).addTo(map).on('mouseover', onClick); 

Dann erstellen die onClick Funktion:

function onClick(e) { 
    alert(this.getLatLng()); 
} 

Nun, wann immer Sie diese Marker Mouseover es einen Alarm von der aktuellen Brand lat/lang. JEDOCH könntest du 'click', 'dblclick', etc. anstelle von 'mouseover' drücken und anstatt lat/long zu alarmieren, kannst du js im Body von onClick verwenden, um noch etwas anderes zu tun.

ist die Dokumentation zu folgen: http://leafletjs.com/reference.html#events

11

Weitere relevante Informationen: Eine gemeinsame Notwendigkeit, die ID des Objekts durch den Marker zu einem gewissen Ajax-Aufruf zum Zweck des Abrufens weitere Informationen von dem Server dargestellt passieren soll .

Es scheint, dass, wenn wir das tun:

marker.on('click', function(e) {... 

Die e zeigt auf einen Mouseevent, das uns Objekt an den Marker nicht bekommen lassen. Aber es gibt ein eingebautes this Objekt, das seltsamerweise verlangt, dass wir this.options verwenden, um zum options Objekt zu kommen, das uns alles passieren lässt, was wir brauchen. Im obigen Fall können wir eine ID in einer Option übergeben, die objid dann innerhalb der Funktion oben sagen lassen, wir den Wert durch den Aufruf erhalten können: this.options.objid

11

hier ein jsfiddle mit einem Funktionsaufruf ist: https://jsfiddle.net/8282emwn/

var marker = new L.Marker([46.947, 7.4448]).on('click', markerOnClick).addTo(map); 

function markerOnClick(e) 
{ 
    alert("hi. you clicked the marker at " + e.latlng); 
} 
+0

den Zugriff auf die Eigenschaften des Markers wie Name und andere Variablen zuweist? – nikhilvj

+1

@nikhilvj: hier ist eine erweiterte jsfiddle mit einigen zusätzlichen Optionen: https://jsfiddle.net/8282emwn/139/ –

-1

Ein wenig spät auf die Party, fand dies während der Suche nach einem Beispiel für die Marker-Klick-Ereignis. Der undefinierte Fehler des ursprünglichen Posters ist, dass auf die onClick-Funktion verwiesen wird, bevor sie definiert wurde. Vertausche die Zeilen 2 und 3 und es sollte funktionieren.

+0

Das ist falsch. Siehe Hochziehen in Javascript https://developer.mozilla.org/en-US/docs/Glossary/Hoisting – nikoshr