【问题标题】:Update content of popup via AJAX in leaflet通过传单中的 AJAX 更新弹出窗口的内容
【发布时间】: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!)

感谢您的帮助!

【问题讨论】:

标签: javascript ajax dom popup leaflet


【解决方案1】:

您的弹出窗口宽度受到L.PopupmaxWidth 选项的限制,默认为300px:

http://leafletjs.com/reference.html#popup-maxwidth

这可以在绑定/初始化弹出窗口时轻松设置:

L.Marker([0, 0]).bindPopup('Lorem', {maxWidth: 600}).addTo(map);

你在 Plunker 上的一个分叉:http://plnkr.co/edit/nfxhuUV40dfRV21YKFpu?p=preview

【讨论】:

  • 谢谢!您知道将 maxWidth 设置为视口的 100% 的方法吗?在小屏幕上,提供固定的像素值并不是最好的办法……
  • 您可以使用L.MapgetSize 方法来确定地图的大小,并使用它为您的L.Popup 创建正确的minWidthmaxWidth 选项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多