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) 

Когда я нажмите на маркер, то предупреждающее сообщение не определеноМаркер в листовке, нажмите событие

Но если я положил его в переменной карте, это работает! (показывает широту и долготу)

map.on('click', onClick); 

Кто-нибудь знает, почему он не работает в маркерах?

+1

Есть ли var marker = L.marker ([10.496093, -66.881935]). On ('click', funciton (e) {alert (e.latlng);}); 'дают одинаковые результаты? – asifrc

+0

Я внес изменения, которые вы упомянули, но не работает –

+1

Следуя за сообщением Криса ниже, вы можете изменить свой код как 'var marker = L.marker ([10.496093, -66.881935]). AddTo (map) .on ('click', onClick); ' – Ayush

ответ

12

Я нашел решение:

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

используется метод getLatLng() маркера

+9

возможно, вы могли бы создать скрипку для этого? нет четкой документации о том, как присвоить событиям щелчка маркерам – snowgage

35

приведенный выше ответ правильный и по праву принято. Однако, как и для @snowgage, мне понадобилось немного больше ясности, поэтому на случай, если кто-то еще сделает это:

Листовка позволяет событиям стрелять практически на все, что вы делаете на своей карте. В этом случае маркер.

Таким образом, вы могли создать маркер на каждый вопрос выше:

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

Затем создать функцию OnClick:

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

Теперь в любое время вы наведите курсор мыши, что маркер будет срабатывать предупреждение тока широта/долгота. ОДНАКО, вы могли бы делать «кликнуть», «dblclick» и т. Д. Вместо «мыши», а вместо предупреждения lat/long вы можете использовать js в теле onClick, чтобы сделать что-нибудь еще, что вы хотите.

Вот документация следовать: http://leafletjs.com/reference.html#events

11

соответствующая дополнительная информация: Обычная потребность передать идентификатор объекта, представленный маркерами какого-то АЯКС вызова с целью извлечения больше информации с сервера ,

кажется, что когда мы делаем:

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

В e указывает на MouseEvent, который не позволяет нам добраться до объекта маркером. Но есть встроенный объект, который, как ни странно, требует от нас использовать this.options, чтобы добраться до объекта options, который позволит нам передать все, что нам нужно. В приведенном выше случае, мы можем передать некоторый идентификатор в качестве опции, скажем objid то внутри функции выше, мы можем получить значение путем вызова: this.options.objid

11

Вот jsfiddle с вызовом функции: 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

как получить доступ к свойствам маркера, таким как имя и другие переменные? – nikhilvj

+1

@nikhilvj: вот расширенный jsfiddle с некоторыми дополнительными опциями: https://jsfiddle.net/8282emwn/139/ –

-1

Немного поздно на вечеринку, нашел это, ища пример события щелчка маркера. Неопределенная ошибка, которую получил исходный плакат, связана с тем, что функция onClick указана до ее определения. Переверните строку 2 и 3, и она должна работать.

+0

Это неверно. См. Подъем в Javascript https://developer.mozilla.org/en-US/docs/Glossary/Hoisting – nikoshr