2015-10-06 70 views
0

我一直在阅读一段时间,仍然没有找到解决我的问题。单张Js:openPopup不会显示

我有一个GeoJson,我加载的地图。我使用标记群集来分组所有功能。我将弹出窗口绑定到这些标记,并且工作正常:弹出窗口显示在点击上,没有问题。

我构建了一个自定义控件区域,在该区域中我有两个输入,用于过滤关于他们的价格(最小值和最大值)的geojson数据;然后我加载下面的结果列表,这也正常工作,当我将鼠标悬停在标记上时,iIcan可以突出显示结果列表的项目。

我的问题:我想在地图上打开标记的弹出框,当我点击与它对应的结果列表项时。但弹出窗口不显示。 由于地图正朝着标记重新定位,所以地图铺设似乎没问题。即使是弹出式数据加载(我可以看到一个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

如果您问我,这看起来像Leaflet中的一个错误,或者更像是leaflet.markercluster插件中的错误。你没有尝试过没有集群? – tyr

+0

是的,我试了一下,因为我怀疑markercluster插件也有问题。问题是一样的,即使我删除了集群。 https://github.com/Leaflet/Leaflet.markercluster/issues/567 – xefiji

回答

2

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

这里的工作小提琴:http://jsfiddle.net/vh6do4tm/3/

但是请注意,您的解决方案仍然没有很好地结合在一起与markercluster插件作为当前集群标记(和标记它是当前视外)工作不开弹出:http://jsfiddle.net/vh6do4tm/2/。你必须以不同的方式解决这个问题。

+1

谢谢@tyr,这正是我一直在寻找的。我在marckerCluster中添加了zoomToShowLayer函数,以自动缩放聚集标记,因为我在这里提供了https://groups.google.com/forum/#!topic/leaflet-js/sFtuUxMElrI的建议。这里是最后的jsfiddle:http://jsfiddle.net/n3pkzcm7/8/ – xefiji

+0

谢谢。这解决了我自己的问题。 – redshift

0

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

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

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

(在哪个地方是一个以GeoJSON层)

和它的工作很大。