@vovastradamus

Как привязать функцию к каждому элементу по клику?

Добрый день.
Как привязать к кажому созданному элементу вызов функции (вызов по клик)?
Привязка клика происходит, но привязывается только последний элемент массива.
Вот пример кода:
var b = document.querySelector('body');
var arr = [1,4,2,43,54,30,6,3];
for (var i = 0; i < arr.length; i++) {
  var el = document.createElement('div');
  var tag = arr[i];
  el.appendChild(document.createTextNode('chto-to #'+tag));
	b.appendChild(el);
  el.addEventListener('click', function(e) {
    someFunc(tag);
  });
}
function someFunc(v) {
  console.log(v);
}

Ссылка на fiddle
  • Вопрос задан
  • 309 просмотров
Решения вопроса 1
@lega
Замыкание: https://jsfiddle.net/lega911/5tavj5u6/

так же можно воспользоваться let (из ES6+):
var b = document.querySelector('body');
var arr = [1,4,2,43,54,30,6,3];
for (let tag of arr) {
  var el = document.createElement('div');
  el.appendChild(document.createTextNode('chto-to #'+tag));
	b.appendChild(el);
  el.addEventListener('click', function(e) {
    someFunc(tag);
  });
}
function someFunc(v) {
  console.log(v);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Лучшее решение - это делегирование событий!
Общая идея: есть обертка на которую вешается слушатель, а из за всплытия клика можно узнать на каком элементе был клик, ставим к примеру на него атрибут data-uniq=1 и проверяем его при клике getAttribute('data-uniq'). Так будет намного лучше. :)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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