78
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); 

有人知道为什么它在标记中不起作用吗?

4

5 回答 5

104

接受的答案是正确的。但是,我需要更清楚一点,以防其他人也这样做:

Leaflet 允许事件触发您在其地图上所做的几乎任何事情,在本例中为标记。

因此,您可以按照上述问题的建议创建一个标记:

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

然后创建 onClick 函数:

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

现在,只要您将鼠标悬停在该标记上,它就会触发当前纬度/经度的警报。

但是,您可以使用“click”、“dblclick”等来代替“mouseover”,而不是提醒 lat/long,您可以使用 onClick 的主体来做任何您想做的事情:

L.marker([10.496093,-66.881935]).addTo(map).on('click', function(e) {
    console.log(e.latlng);
});

这是文档: http: //leafletjs.com/reference.html#events

于 2014-07-01T02:29:44.173 回答
25

这是一个带有函数调用的 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);
}
于 2016-03-09T22:19:32.413 回答
20

我找到了解决方案:

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

使用了标记的getLatLng()方法

于 2013-06-04T21:59:29.087 回答
18

其他相关信息:一个常见的需求是将标记所代表的对象的 ID 传递给一些 ajax 调用,以便从服务器获取更多信息。

似乎当我们这样做时:

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

指向一个 MouseEvent ,e它不允许我们到达标记对象。但是奇怪的是,有一个内置this对象要求我们使用它this.options来获取options让我们传递任何我们需要的东西的对象。在上述情况下,我们可以在选项中传递一些 ID,假设objid在上面的函数中,我们可以通过调用来获取值:this.options.objid

于 2014-09-14T05:32:09.850 回答
-4

聚会有点晚了,在寻找标记点击事件的例子时发现了这一点。原始发布者得到的未定义错误是因为在定义之前引用了 onClick 函数。交换第 2 行和第 3 行,它应该可以工作。

于 2017-11-21T08:50:13.750 回答