javascript - leafletjs - marker.bindPopup - 保持所有弹出窗口打开

标签 javascript jquery leaflet

我在使用传单打开所有弹出窗口时遇到了一些困难。

我在循环中有以下代码,用于将标记添加到 LayerGroup(ajax 自动更新)。

var marker = L.marker([value.position.lat, value.position.lon],options).addTo(markers);
allpoints.push([value.position.lat, value.position.lon]);
marker.bindPopup("InfoWindow",{closeOnClick:false,closeButton:false}).openPopup();

它工作得很好,除了它只保持最后一个弹出窗口打开。我想让它们全部打开。我确实在这里 (stackoverflow) 上找到了一篇关于使用不同的标记名称这样做的文章,但是我把它放在一个循环中。我确实尝试将 L.marker 放入数组中,但 leaflet 不喜欢那样。

有什么想法吗?

最佳答案

您将需要覆盖 Leaflet Map 上的 openpopup 方法,将其替换为该方法的副本,仅注释掉调用 this.closePopup() 的行;

在你的页面上你会添加

L.Map = L.Map.extend({
    openPopup: function (popup, latlng, options) { 
        if (!(popup instanceof L.Popup)) {
        var content = popup;

        popup = new L.Popup(options).setContent(content);
        }

        if (latlng) {
        popup.setLatLng(latlng);
        }

        if (this.hasLayer(popup)) {
        return this;
        }

        // NOTE THIS LINE : COMMENTING OUT THE CLOSEPOPUP CALL
        //this.closePopup(); 
        this._popup = popup;
        return this.addLayer(popup);        
    }
});

http://jsfiddle.net/yVLJf/37/

你可以在这里找到原始的 Leaflet openPopup 方法: https://github.com/Leaflet/Leaflet/blob/1acffc5a3d31010b7d613382ab2a5830ecee5dd5/src/layer/Popup.js#L290

关于javascript - leafletjs - marker.bindPopup - 保持所有弹出窗口打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21654126/

相关文章:

r - R : a legend for binary variables 的传单

javascript - 可以在传单 map 中设置 MBTiles 的样式吗?

javascript - 带有自定义图 block 的传单自定义 map

javascript - 如何禁用子域的 Service Worker?

javascript - 调整窗口大小时,页面上的四个图像不会调整大小

javascript - Vue.js:EventBus.$收到的值没有传播

javascript - 如果在同一个 div 上则没有动画

javascript - .done 不是函数

javascript - javascript/jQuery 中带有可变参数的函数

javascript - 为普通函数添加 d.ts,它返回一个包装函数的函数