2016-08-27 3 views
3

У меня есть несколько (444) popups, открытых на моем map.Как закрыть все всплывающие окна?

Я попытался это:

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

Но этот путь, не все закрываются. Только половина из них удаляется. Ровно половина. Поэтому первый раз 222 удаляются, второй раз 111 удаляется.

Почему это происходит?

+1

Создайте скрипку, воспроизводящую проблему. Трудно дать ответ, основанный на вас. –

+0

'$ (this) .click()' –

ответ

1

Я вижу, что вы пытаетесь сделать, но это, похоже, не очень хорошая идея. Вы буквально (программно) вызывают 444 щелчка, которых на самом деле не существует. Если в один прекрасный день вы решите отслеживать клики пользователей по этим элементам, у вас возникнет проблема.

Что делать, если вы пытаетесь добавить класс к общему родительскому объекту 444 leaflet-popup-close-button, который заставляет их с помощью CSS свернуть/закрыть?

Нечто подобное было бы лучшим решением для того, что вы пытаетесь сделать.

Btw, проверяя их docs Кажется, что эти всплывающие окна открыты на новом слое, поэтому вам, вероятно, просто нужно удалить этот слой, и все они исчезнут.

С их Документах

Use Map # openPopup открывать всплывающие окна, удостоверившись, что только один всплывающее окно открыто в одно время (рекомендуется для удобства), или использовать Map # addLayer открыть, как многие, как вы хотеть.

И дополнительно проверьте, есть ли у вас addLayer и removeLayer. Что бы вы ни делали, я предлагаю вам избежать всех этих программных щелчков.

+0

Скрытие родительского элемента html работает, но затем, когда я пытаюсь добавить новые всплывающие окна, они не отображаются, потому что родительский элемент html скрыт. Я попытаюсь заставить его работать со слоями. –

+0

Да, по тому, что я видел в своих документах, вы, вероятно, уже используете слои. Мне непонятно, чего вы пытаетесь достичь.При добавлении большего количества элементов вы могли бы удалить класс, который вы добавили в родительский элемент, но я думаю, что их api позволяет вам делать это без добавления/удаления классов, поэтому я попытаюсь пойти с этим. – rafaelbiten

+1

Он работал с 'removeLayer'. Я попробовал 'removeLayer' уже, но я использовал его неправильно в первый раз. :) –

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, который указал мне в правильном направлении (слоях).

0

В последних версиях листовка:

Правильный способ закрыть всплывающее окно, чтобы использовать встроенный в .closePopup() method:

map.closePopup(); 

Если у вас есть несколько слоев с различными всплывающие окна (например, в ОП-х case), то вы можете перебирать слои и закрывать всплывающее окно на каждом слое:

Смежные вопросы