Почему идет ошибка like.addEventListener is not a function?

1105
17 февраля 2017, 04:19

Есть такой код и он работает:

function openLikeBlock() {
    var like = document.getElementById("like");
    like.addEventListener('click', function (e) {
        e.preventDefault();
        if (!this.classList.contains('open'))
            this.classList.add('open');
        else
            this.classList.remove('open');
    });
}

Но если добавить ClassName то будет ошибка :

var like = document.getElementsByClassName("like");

Uncaught TypeError: like.addEventListener is not a function

Мне нужно именно класс, так как таких блоков несколько на странице( поэтому использую this)

Вопрос: как сделать, что бы я мог получать элемент по классу, а не ID?

Answer 1

Потому что getElementsByClassName возвращает коллекцию элементов, а у коллекции нет метода addEventListener

для решение можно просто пробежаться по возвращенной коллекции. например так:

[].forEach.call(like,function(el){
    el.addEventListener('click', function (e) {...})
});
READ ALSO
Получение ответа от сервера?

Получение ответа от сервера?

При клике на кнопку происходит загрузка файла на сервер в ответ я получаю

322
Асинхронная анимация jQuery

Асинхронная анимация jQuery

Как мне сделать animate и show асинхронными (Чтобы выполнялись одновременно) ? Пробовал делать так, но не работает

409
Нужно скрыть div с сгенерированным id

Нужно скрыть div с сгенерированным id

Нужно скрыть div с определнным id, полученным из localStorageЧто я делаю неправильно?

268