villiwalla
@villiwalla
HTML-верстка

Cannot read property 'addEventListener' of undefined, но при этом работает код, в чём причина?

На элементах весит событие на открытие менюшки, как только менюшка открылась, вещаются события на действия. Все действия работают (код в целом), но вот сообщение об ошибки в консоле насторожил, после addEventListener на указание что с ним что-то не так, код не работает. Следствием чего могут проблемы с addEventListener ?
var menu = {
            open: function (el) {
                let id = el.parentNode.parentNode.getAttribute('data-id');
                let day = el.parentNode.getAttribute('data-date');
                let userName = el.parentNode.parentNode.childNodes[1].innerText;
                let date = new Date();

                el.insertAdjacentHTML('beforeBegin', '<div class="context-menu">' +
                    '<p>' + userName + '<br>' + day + '/' + (date.getMonth()+1) + '/' + date.getFullYear() + '</p>'+
                    '<ul class="nav flex-column" data-menu="' + id + '">' +
                    '<li class="nav-item"><a class="nav-link" href="#add"><i class="fa fa-clock-o" aria-hidden="true"></i> Добавить</a></li>' +
                    '<li class="nav-item"><a class="nav-link" href="#edit"><i class="fa fa-pencil" aria-hidden="true"></i> Редактировать</a></li>' +
                    '<li class="nav-item"><a class="nav-link" href="#close"><i class="fa fa-times-circle" aria-hidden="true"></i> Закрыть</a></li>' +
                    '</ul></div>');

                let elem = document.querySelectorAll('.context-menu a.nav-link');

                for(let i = 0; elem.length > 0; i++) {
                    elem[i].addEventListener('click', function () {
                        switch (this.getAttribute('href')) {
                            case '#add' : menu.add(); break;
                            case '#edit' : menu.edit(); break;
                            default : menu.close(); break;
                        }
                    });
                }
            }
};
  • Вопрос задан
  • 735 просмотров
Решения вопроса 1
abyrkov
@abyrkov
JavaScripter
В этом цикле for у вас ошибка ;) Посмотрите на условие.
for(let i = 0; elem.length > 0; i++) {
                    elem[i].addEventListener('click', function () {
                        switch (this.getAttribute('href')) {
                            case '#add' : menu.add(); break;
                            case '#edit' : menu.edit(); break;
                            default : menu.close(); break;
                        }
                    });
                }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы