2015-12-29 33 views
0

我希望能夠更改leafletjs地圖上的彈出窗口的內容。我有數百個標記,每個標記都有自己的彈出窗口,它們從一個數組中加載到一個for循環中。leafletjs如何獲得活動彈出/標記的句柄

var marker = L.marker(new L.LatLng(a[0], a[1]), { title: title }); 
    marker.bindPopup('<img width="'+width+'" height="'+height+'" src="'+a[3]+'"/><br><div id="weather"> <button type="button" onclick="weatherload(\''+a[0]+'\',\''+a[1]+'\')">Click Me for Weather!</button></div>',{'maxWidth':'500','maxHeight':'350','minWidth':'350'}); 
    CAMlayer.addLayer(marker); 

這會彈出一個圖片和一個按鈕。當按鈕被點擊時,我想讓按鈕消失,被加載gif所取代。雖然AJAX功能會向服務器詢問幾件事情,但一旦它從服務器獲取數據,它應該再次更改內容。我可以用div上的id做所有這些,但是這打破了我想要工作的彈出窗口的大小調整。

myPopup._updateLayout() 

可以用來強制它調整大小,但是如何告訴它哪個是myPopup可以工作?

據我所知setContent是更新彈出窗口的正確方法,但是又如何告訴它哪個彈出窗口是我想要處理的活動窗口呢?

How to identify Marker during a popupopen event?這看起來很有希望,但我還沒有想出如何使用設置的方式來更改彈出內容的id。

for grammar。

回答

1

您將有幾個選項來保持對包含單擊按鈕的彈出框的引用。它們是「容易的」(對於你用純HTML文本填充彈出內容的情況,包括你的按鈕HTML),將保持每個彈出/標記的映射,其中鍵是一種ID,然後將該ID傳遞給weatherload函數。

如果僅保留對標記的引用,則可以使用getPopup() method檢索綁定的彈出窗口。

var allMarkersMap = {}; 
var currentID = 0; 

// Create a marker with a popup. 
var button = '<button onclick="weatherload('+ lat + ',' + lng + ',' + currentID + ')">Click Me for Weather!</button>'; 
var marker = L.marker(lat, lng).bindPopup(permanentContent + button); 
marker.myPermanentContent = permanentContent; 

allMarkersMap[currentID] = marker; 
currentID += 1; 

// Loop to create more markers. 

function weatherload(lat, lng, markerID) { 
    var marker2 = allMarkersMap[markerID]; 
    var permanentContent2 = marker2.myPermanentContent; 
    var popup = marker2.getPopup(); 
    // Use this to add your loading GIF. Do the same in your AJAX callback. 
    popup.setContent(permanentContent2 + newContent); 
} 

更復雜的解決方案(但它可以讓您更多的控制)將創建將在您的彈出窗口中的HTML元素。這樣,您可以直接將彈出窗口作爲按鈕的屬性進行綁定。

演示:http://jsfiddle.net/ve2huzxw/95/

+0

採取了一些學習你的代碼要弄清楚它是如何工作的。這個數組非常聰明,很好地解決了這個問題。在這個和你的演示之間,我發現它是一個快樂的人。 – Brandan