如何关闭所有弹出窗口?

时间:2016-08-27 21:42:59

标签: javascript leaflet

我的popups打开了多个(444)map

我试过了:

$(".leaflet-popup-close-button").each(function (index) {
    $(".leaflet-popup-close-button")[index].click();
});

但是这样,并非所有人都被关闭了。只有一半被删除。正好一半。所以第一次222被删除,第二次111被删除。

为什么会这样?

3 个答案:

答案 0 :(得分:1)

我看到你正在尝试做什么,但这似乎不是一个好主意。你实际上(以编程方式)导致了444次点击,这些点击并不存在。如果有一天您决定跟踪用户对这些项目的点击次数,那么您将遇到问题。

如果您尝试将类添加到强制它们的那些444 leaflet-popup-close-button的公共父级,通过CSS折叠/关闭,该怎么办?

这样的事情对于你正在尝试做的事情来说是一个更好的解决方案。

顺便说一句,检查他们的docs似乎这些弹出窗口都在新图层上打开,因此您可能只需要移除该图层,所有图片都将消失。

来自他们的文档:

  

使用Map#openPopup打开弹出窗口,同时确保一次只打开一个弹出窗口(推荐用于可用性),或者使用Map#addLayer打开任意数量的弹出窗口。

进一步检查您有addLayerremoveLayer。无论你做什么,我建议你避免所有那些以编程方式点击。

答案 1 :(得分:1)

这就是我解决问题的方法:

var firstLayer = true;

 map.eachLayer(function (layer) {
    // do something with the layer
    if (firstLayer) {
        firstLayer = false;
    } else {
        map.removeLayer(layer);
    }
    //console.log(layer);
});

我有3层,第一层是显示我的地图的主要层,这就是为什么它不能被删除。我删除了第二个和第三个,这两个层都有多个弹出窗口。

感谢@rafaelbiten,他指出了我正确的方向(层)。

答案 2 :(得分:1)

最新版本的Leaflet:

关闭弹出窗口的正确方法是使用内置的Simple Bayesian Network via Monte Carlo Markov Chain ported to PyMC3

map.closePopup();

如果您有多个具有不同弹出窗口的图层(例如在OP的情况下),那么您可以遍历图层并关闭每个图层上的弹出窗口:

map.eachLayer(function (layer) {
  layer.closePopup();
});