@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]).
  • Вопрос задан
  • 2477 просмотров
Решения вопроса 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+'") и при клике что бы скрипт считывал его
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
28 нояб. 2024, в 10:57
50000 руб./за проект
28 нояб. 2024, в 10:52
10000 руб./за проект