我有一个markerLayer.on('click', function() {...})
事件连接到我的Mapbox,我试图在有人点击相关表项时触发它。表项具有lat / long内置,因此它们已经平移到正确的标记,但它不一定会触发onclick事件。有没有一种简单的方法来改变它?
特定功能详细信息:通常单击Mapbox标记会显示一个弹出窗口,其中包含有关该位置的一些信息。每个位置在表格中显示为一行,理想情况下单击关联的行也会显示Mapbox弹出窗口。
答案 0 :(得分:2)
为什么不这样做...为init循环中的每个标记创建一个唯一的顺序id ...在创建它时将它设置在选项中并存储在一个对象中......比如
mapMarkers = {};
mapMarkers[currentIndex] = L.marker([35.2,25.4],{my_seq_id:currentIndex};
markerLayer.addLayer(mapMarkers[currentIndex]);
currentIndex++;
并为每个表格行设置与data-myseqid
(或任何你想要的)相同的顺序ID ...
然后通过一个统一的位置代理这两个操作(映射点击和表格点击)。然后您可以轻松地将更多处理程序绑定到此。
function doMapAction(id) {
mapMarkers[id].openPopup()
//plus whatever else you need to do after a click
}
markerLayer.on('click', function(layer) {
doMapAction(layer.options.my_seq_id);
})
$(document).on('click','td button', function(ev) {
doMapAction(parseInt($(ev.target).data('myseqid')));
})
答案 1 :(得分:1)
如何模拟Mapbox markerLayer上的点击
请注意,Mapbox标记也是Leaflet标记。因此,您可以使用Leaflet事件方法,尤其是markerLayer.fireEvent("click")
。
至于检索正确的标记以触发事件,并可能简化算法,请参考snkashis'的好答案。