wbrapist
@wbrapist
Ты в порядке?

Как по разному реагировать на клик на большое количество элементов?

Например, есть div-блоки:
<div></div> <!-- Первый блок -->
...
<div></div> <!-- Тысячный блок -->


Дальше:
var div = document.querySelectorAll('div');

И как мне обработать все DIV? Например, нажимаю на первый, вывод:
Привет, я 1 блок
Нажимаю на 305 div
Привет, я 305 блок

В общем, суть в том, что мне нужно знать на какой блок был произведен клик, и уже от его порядкового номера (который нужно получить) что-то делать (опять же, под что-то, я имею в виду какую-нибудь функцию, которая будет одинакова во всех блоках, но будет получать в виде аргумента порядковый номер DIV'a).

Количество блоков не известно заранее.
  • Вопрос задан
  • 263 просмотра
Решения вопроса 2
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
Подсказки:
data attribute, addEventListener(), e.target
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Два варианта:
1. Повесить обработчик на каждый блок
var divs = Array.prototype.slice.call(document.querySelectorAll('div'));
divs.forEach((div, i)=>div.addEventListener('click', function(){
  console.log('Hello from block #' + i)
}))


2. Один обработчик на документ, который слушает все клики, и выбирает из них те, что были по дивам.
document.addEventListener('click', function(evt){
  if (evt.target.tagName == 'DIV') {
    var i = divs.indexOf(evt.target)
    console.log('Hello from block #' + i)
  }
})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы