2014-10-29 66 views
3

我希望彈出窗口在點擊Leaflet標記時不顯示。 我不能使用clickable : false,因爲它會使標記「充當底層地圖的一部分」,這對我來說是不可接受的。我試了下代碼如何防止彈出窗口顯示clk標記在傳單中?

marker.on('click', function(event) { 
    event.originalEvent.preventDefault(); 
}); 

沒有任何結果。不使用標記對象的clickable : false屬性,防止彈出顯示的正確方法是什麼?

編輯1:我只需要通過點擊一個自定義按鈕,打開所有地圖上的popus,我還是不想彈出展會本身後,我點擊特定標記

回答

3

只是不要將彈出窗口綁定到標記。這裏有一個帶有2個標記的fiddle。一個彈出,另一個不彈出。

L.marker([51, 0]).bindPopup("this is a popup").addTo(map); 

L.marker([51, 1.5]).addTo(map); 

編輯: 我編輯的fiddle,並認爲這可能是你的要求。下面的代碼的重要組成部分:

function onClick(event) { 
    event.target.closePopup(); 
} 
+0

我想這不適合我,因爲我仍然需要彈出窗口。我需要的只是通過點擊一個自定義按鈕打開地圖上的所有popus,但我不想在點擊特定標記後彈出自身。 – 2014-10-30 07:23:57

-1

附加返回false 。它應該工作。儘管我不太確定。

marker.on('click', function(event) { 
    event.originalEvent.preventDefault(); 
    return false; 
}); 
+0

沒有爲我工作 – 2014-10-29 19:07:28

+0

請說明更清楚。 – WahidSherief 2014-10-29 19:12:39

2

嘗試以下解決方法:

marker.bindPopup('my popup content'); 

// remove openPopup click handler (actually all click handlers) 
marker.off('click'); 

// Do nothing on click. This is not necessary, but now marker 
// doesn't act like part of underlying map 
marker.on('click', function() {return;}); 

詳見plunker

1

沒有其他答案適用於我(可能是因爲更新版本的Leaflet)。我結束了跳過marker.bindPopup(),然後使用L.popup()分開創建彈出窗口,然後在我需要它們出現時調用map.openPopup(thePopup)

事情是這樣的:

var map = L.map(), 
    popup = L.popup().setContent("Stuff"), 
    marker = L.marker(); 
popup.setLatLng(marker.getLatLng()); 

// In my event handler 
map.openPopup(popup); 
0

中庸之道從標記的點擊事件刪除openPopup

marker.bindPopup('My popup!'); 
marker.off('click', this.openPopup);