2015-10-06 64 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層)

和它的工作很大。