【发布时间】:2015-12-16 17:57:17
【问题描述】:
我正在尝试更新传单中弹出窗口的内容。首先,我创建标记并将弹出窗口绑定到它们:
$.ajax({
type: "GET",
url: "/?p=map&json=1"+filter,
dataType: 'json',
success: function (response) {
geojson = L.geoJson(response, {
pointToLayer: function (feature, latlng) {
return L.marker(latlng);
},
onEachFeature: onEachFeature
});
markers.addLayer(geojson);
map.addLayer(markers);
});
}
});
var layers = [];
function onEachFeature(feature, layer) {
feature.layer = layer;
layer.origID = feature.properties.id;
if (feature.properties && feature.properties.project_name) {
var divNode = document.createElement('DIV');
divNode.innerHTML = 'initial popup content from database <button onclick="makeAjaxCall('+feature.properties.id+')">more</button>';
layer.bindPopup(divNode);
}
layers.push(layer);
}
最初,弹出窗口中有一个按钮,它会触发 ajax 调用以更新弹出窗口内容。
那个 ajax 调用返回并调用 setPopupContent():
function setPopupContent(id,data){
for(var i=0;i<layers.length;i++){
if(layers[i].origID == id){
console.log(layers[i]);
var p = layers[i].getPopup();
p.setContent(data);
p.update();
}
}
}
一切都按预期工作,但弹出窗口的大小未更新为新内容。它保持在 301 像素。 p.update() 不应该也更新弹出窗口大小吗?
或者是否有更好的方法来处理从该弹出窗口中触发的弹出内容更新?
这是一个示例:http://plnkr.co/edit/LUyOWqkSVazhiadEix2q?p=preview(谢谢 iH8!)
感谢您的帮助!
【问题讨论】:
-
无法使用 Leaflet 0.7.7 重现您的问题:plnkr.co/edit/okPQu2KjnFok2kWYg2ra?p=preview
-
@iH8 试试这个分叉:plnkr.co/edit/LUyOWqkSVazhiadEix2q?p=preview
-
啊,我明白了。发布了答案。
标签: javascript ajax dom popup leaflet