Leaflet Js:openPopup 不会显示

Leaflet Js: openPopup won't show

我已经阅读了一段时间,但仍然没有找到解决我的问题的方法。

我在地图中加载了一个 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!!');
});

事件被触发,无论我是点击标记还是侧边栏的结果列表项。

您必须在自定义传单控制框上使用传单的 disableClickPropagation 方法。因为否则鼠标事件会传播到它下面的传单地图,这会导致弹出窗口在打开后立即关闭。

这是一个有效的 fiddle:http://jsfiddle.net/vh6do4tm/3/

但是请注意,您的解决方案仍然无法与 markercluster 插件一起很好地工作,因为当前聚集的标记(以及当前视口之外的标记)不会打开弹出窗口:http://jsfiddle.net/vh6do4tm/2/。您将不得不以不同的方式解决这个问题。

我在类似但不同的情况下发生过这种情况(我想单击一个元素以打开另一个元素的弹出窗口)。上面的答案对引导我走上正轨非常有帮助,但是 disableClickPropagation 在这种情况下不可用。

但是,底层 JavaScript 调用 event.stopPropagation() 是。所以我能够做类似的事情:

<... onclick="event.stopPropagation(); places.getLayer(1569).openPopup();">

(其中的地方是geoJSON层)

效果很好。