Чтобы сохранить простоту и минимальное количество изменений (но далеко не идеальное решение), это:
Для обработчиков щелчков окна вам нужно иметь возможность различать два всплывающих окна, в настоящее время вы используют класс .popup
в качестве проверки, не является ли он ближайшим в обоих случаях, поэтому, когда вы нажимаете на второе всплывающее окно, myFunction()
не выполняется.
Я добавил сюда новый класс имена всплывающих окон, 'one' и 'two' соответственно.
<body style="text-align:center">
<h2>Popup</h2>
<div class="popup one" onclick="myFunction()">Click me to toggle the popup!
<span class="popuptext" id="myPopup">A Simple Popup!</span>
</div>
<h2>Popup2</h2>
<div class="popup two" onclick="myFunction2()">Click me to toggle the popup!
<span class="popuptext" id="myPopup2">A Simple Popup again!</span>
</div>
</body>
Затем в коде javascript вы можете настроить их таргетинг, слегка изменив селекторы:
var popup = document.getElementById("myPopup");
function myFunction() {
popup.classList.toggle("show");
}
window.addEventListener('click', ({ target }) => {
if (!target.closest('.popup.one') && popup.classList.contains('show')) myFunction();
});
var popup2 = document.getElementById("myPopup2");
function myFunction2() {
popup2.classList.toggle("show");
}
window.addEventListener('click', ({ target }) => {
if (!target.closest('.popup.two') && popup2.classList.contains('show')) myFunction2();
});
Опять же, это ни в коем случае не хороший стандарт кодирования и не лучшее решение, а, по сути, простейший с наименьшими изменениями в коде. Я надеюсь, что это поможет понять причину возникновения проблемы.