@MamaLuyba

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

Добрый день.
Есть абстрактный пример кода:
var days = ['mon', 'thu', 'wen']
var nums = ['12', '24', '30']

 for (var i=0; i<days.length; i++) {
	
	var p = document.createElement('p')
	var ind 
	p.innerHTML = days[i]
	p.setAttribute('onclick', 'alert(nums[i])')
	document.body.appendChild(p)
	alert(nums[i])
}


Нужно, чтобы после создания всех <p> в , по нажатию на <p> выдавалось значение элемента из массива nums, индекс которого равен индексу<p> в массиве days.
Тут получается, что пока идет создание элементов, alert(nums[i]) выдает верные значения. Но как только код завершает выполнение, alert(nums[i]) выдает последний элемент массива, т.к. после завершения цикла, значение var i = 2.
Делал это через .forEach - все нормально работает. Но т.к. в .hta .forEach не поддерживается, нужно переписать это через цикл.
Почему при добавлении атрибута к элементу, в атрибут не записывается текущее значение i ? Т.е. получается, что в атрибуте значение onclick прописывается не как (alert[0]) - при первой итерации, например - а как (alert[i]).
  • Вопрос задан
  • 2345 просмотров
Решения вопроса 1
@MamaLuyba Автор вопроса
В общем, решил задачу сам.
Нужно при создании элемента назначить одному из атрибутов элемента значение i, и по нажатию вызывать this.attribute:
var days = ['mon', 'thu', 'wen']
var nums = ['12', '24', '30']

for (var i = 0; i < days.length; i++) {
  var p = document.createElement('p');
  p.alt = i;
  p.innerText = days[i];
  p.onclick = function() {alert(nums[this.alt])};
  document.getElementById("div1").appendChild(p);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jingoo
@jingoo
веб разработчик
создайте отдельную функцию-обработчик и при создании вешайте её на каждый элемент передавая ей нужный порядковый номер параграфа. Или при создании добавляйте специальный атрибут (типа data-someparam="'+i+'") и при клике что бы скрипт считывал его
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 14:12
30000 руб./за проект
19 апр. 2024, в 14:10
500 руб./за проект