рони, да, можно все в один обработчик затолкать, но у меня их 2 для большей наглядности, один отвечает за открытие, второй за закрытие попапа.
С вашим кодом любой клик по контенту попапа приведет к его закрытию, т.к. `.popup_bg` - родительский контейнер для всего его содержимого, у меня не просто так вместо метода `closest` использовался `matches`.
window.addEventListener("click", e => {
if (e.target.closest(".close-popup") || e.target.matches(".popup__bg")) {
e.target.closest("[data-popup]").classList.remove("active");
}
const openPopupNode = e.target.closest("[data-popup-id]");
if (openPopupNode) {
const popupId = openPopupNode.dataset.popupId;
document.querySelector(`[data-popup="${popupId}"]`)?.classList.add("active");
}
});