13

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

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?

Yuri
  • 15,957
  • уже был очень похожий вопрос http://ru.stackoverflow.com/questions/532134/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%BD%D0%B5-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82-innerhtml/532135#532135 – Grundy Jul 10 '16 at 14:21

1 Answers1

19

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

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

[].forEach.call(like,function(el){
    el.addEventListener('click', function (e) {...})
});
Grundy
  • 81,538