我已经阅读了一段时间,仍然没有找到解决我问题的方法。
我在地图中加载了 GeoJson 。我使用标记簇来分组所有功能。我将弹出窗口绑定到那些标记,并且工作正常:弹出窗口显示单击,没问题。
我构建了一个自定义控制区域,其中有两个输入,用于过滤关于其价格(最小和最大)的geojson数据;然后我加载一个下面的结果列表也可以正常工作,当我鼠标悬停一个标记时,我会突出显示结果列表的项目。
我的问题:当我点击与其对应的结果列表项时,我想在地图中打开标记的弹出窗口。但弹出窗口并没有显示出来。
由于地图重新朝向标记,因此地图显示似乎没问题。甚至加载了弹出数据(我可以用console.log(layer.getPopup())
看到)。
但仍然没有弹出窗口。
这是一个jsfiddle http://jsfiddle.net/n3pkzcm7/4/。
openPopup()
来自_getHtmlList
函数的第88行。
tr.onclick = function() {
console.log(layer.getPopup());
layer.openPopup();
};
如果我将popupopen事件绑定到地图本身,我将添加:
map.on('popupopen', function(){
console.log('open!!');
});
无论是点击标记还是侧边栏的结果列表项,都会触发该事件。
答案 0 :(得分:2)
您必须在自定义传单控制框中使用传单的disableClickPropagation
方法。因为否则鼠标事件会传播到它下面的leafet映射,这会导致弹出窗口在打开后立即关闭。
这是一个工作小提琴:http://jsfiddle.net/vh6do4tm/3/
但请注意,您的解决方案仍然无法与markercluster插件一起使用,因为当前群集标记(以及当前视口之外的标记)不会打开弹出窗口:http://jsfiddle.net/vh6do4tm/2/ 。你必须以不同的方式解决这个问题。
答案 1 :(得分:0)
我发生了类似但不同的情况(我想点击一个元素打开另一个元素的弹出窗口)。上面的回答非常有助于引导我走上正轨,但在这种情况下无法使用disableClickPropagation。
但是,基础 JavaScript 调用event.stopPropagation()
是。所以我能够做到这样的事情:
<... onclick="event.stopPropagation(); places.getLayer(1569).openPopup();">
(其中place是geoJSON图层)
它运作得很好。