Как закрыть все всплывающие окна?
У меня есть несколько (444) popups открытых на моем map.
Я попробовал это:
$(".leaflet-popup-close-button").each(function (index) {
$(".leaflet-popup-close-button")[index].click();
});
Но таким образом, не все закрываются. Только половину из них удаляют. Ровно половина. Итак, в первый раз 222 удаляют, во второй раз 111 удаляют.
Почему это происходит?
3 ответов:
Я понимаю, что ты пытаешься сделать, но это не очень хорошая идея. Вы буквально (программно) вызываете 444 клика, которые на самом деле не существуют. Если однажды вы решите отслеживать клики пользователей по этим элементам, у вас возникнут проблемы.
Что делать, если вы попытаетесь добавить класс к общему родителю тех 444
Что-то вроде этого было бы лучшим решением для того, что вы пытаетесь сделать.leaflet-popup-close-button, которые заставляют их через CSS сворачиваться / закрываться?Кстати, проверяю их docs похоже, что все эти всплывающие окна открыты на новом слое, поэтому вам, вероятно, просто нужно удалить этот слой, и все они исчезнут.
Из их документов:
Используйте Map#openPopup, чтобы открыть всплывающие окна, убедившись, что одновременно открыто только одно всплывающее окно (рекомендуется для удобства использования), или используйте Map#addLayer, чтобы открыть столько, сколько вы хотите.
И проверка далее у вас есть
addLayerиremoveLayer. Что бы вы ни делали, я бы посоветовал вам избегать всего этого. программно щелкает.
Вот что я сделал, чтобы решить свою проблему:
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, который указал мне правильное направление (слои).
Для последних версий листовки:
Правильный способ закрыть всплывающее окно-использовать встроенный
.closePopup()метод :map.closePopup();Если у вас есть несколько слоев с разными всплывающими окнами (как в случае с OP), то вы можете перебирать слои и закрывать всплывающее окно на каждом слое:
map.eachLayer(function (layer) { layer.closePopup(); });
Comments