2013-06-04 11 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) 

Quando faccio clic nel marcatore, il messaggio di avviso viene: indefinitoMarker nel foglio illustrativo, clicca evento

Ma se l'ho messo nella mappa variabile, funziona! (mostra latitudine e longitudine)

map.on('click', onClick); 

Qualcuno sa perché non funziona nel marcatore?

+1

Does var marker = L.marker ([10.496093, -66.881935]) on ('clic', funciton (e) {alert (e.latlng);}); 'produce gli stessi risultati? – asifrc

+0

Ho apportato la modifica che hai menzionato ma non funziona –

+1

Seguendo il post di Chris in basso, potresti modificare il tuo codice come 'var marker = L.marker ([10.496093, -66.881935]). AddTo (map) .on ('click', onClick); ' – Ayush

risposta

12

ho trovato la soluzione:

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

utilizzato il metodo getLatLng() del marcatore

+9

forse potresti creare un violino per questo? non c'è una documentazione chiara su come assegnare gli eventi click ai marcatori – snowgage

35

La risposta di cui sopra è corretta e giustamente accettato. Tuttavia, simile a @snowgage avevo bisogno di un po 'più di chiarezza, quindi nel caso in cui anche qualcun altro:

Il volantino permette agli eventi di sparare praticamente su qualsiasi cosa tu faccia sulla sua mappa. In questo caso un marker.

Così si potrebbe creare un marker per ogni domanda di cui sopra:

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

Quindi creare la funzione onClick:

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

Now in qualsiasi momento si mouseover che segnalino che si attiva un allarme della corrente Lat/Long. TUTTAVIA, puoi fare "clic", "dblclick", ecc. Anziché "mouseover" e invece di avvisare lat/long puoi usare js nel corpo di onClick per fare qualsiasi altra cosa tu voglia.

Ecco la documentazione da seguire: http://leafletjs.com/reference.html#events

11

Ulteriori informazioni rilevanti: Un bisogno comune è quello di passare l'ID dell'oggetto rappresentato dal marcatore in una certa chiamata AJAX con lo scopo di andare a prendere ulteriori informazioni dal server .

Sembra che quando facciamo:

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

I e indica un MouseEvent, che non cerchiamo di ottenere l'oggetto marcatore. Ma c'è un oggetto integrato this che stranamente, ci richiede di usare this.options per raggiungere l'oggetto options che ci permette di passare tutto ciò di cui abbiamo bisogno. Nel caso di cui sopra, siamo in grado di passare un po 'ID in un'opzione, diciamo objid poi all'interno della funzione di cui sopra, possiamo ottenere il valore invocando: this.options.objid

11

Ecco un jsfiddle con una chiamata di funzione: 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

come accedere alle proprietà dell'indicatore come nome e altre variabili? – nikhilvj

+1

@nikhilvj: ecco un jsfiddle esteso con alcune opzioni aggiuntive: https://jsfiddle.net/8282emwn/139/ –

-1

Un po 'in ritardo per la festa, abbiamo trovato questo mentre cercavo un esempio di evento click marker. L'errore non definito ottenuto dal poster originale è dovuto al fatto che la funzione onClick viene definita prima della sua definizione. Scambia le linee 2 e 3 e dovrebbe funzionare.

+0

Che non è corretto. Vedere sollevamento in Javascript https://developer.mozilla.org/en-US/docs/Glossary/Hoisting – nikoshr

Problemi correlati