Показать сообщение отдельно
  #2 (permalink)  
Старый 10.04.2023, 19:48
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,734

Скорее всего у вас скрипт отрабатывает еще до того, как на странице появится ваше модальное окно.
+ метод `getElementsByClassName` возвращает `HTMLCollection`, а не `HTMLElement`, у которой нет метода `addEventListener`.

Попробуйте так:

function getCookie(name) {
    let matches = document.cookie.match(new RegExp(
        "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
    ));
    return matches ? decodeURIComponent(matches[1]) : undefined;
}

document.addEventListener('DOMContentLoaded', function() {
    let mcookie = getCookie("mcookie");
    if (mcookie != "no") {
        setTimeout(function() {
            showModal("obratnyij-zvonok/");
            document.querySelector("fancybox-close").addEventListener("click", function() {
                if ('modalwin' in window) {
                    modalwin.style.display = "none";
                }

                // записываем cookie на 1 день, с которой мы не показываем окно
                let date = new Date;
                date.setDate(date.getDate() + 1);
                document.cookie = "mcookie=no; path=/; expires=" + date.toUTCString();
            });
        }, 1000);
    }
});
Ответить с цитированием