Показать сообщение отдельно
  #36 (permalink)  
Старый 19.06.2017, 13:12
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Alessio18911,
Попробую объяснить.
Ваш пример
for (var i = 0; i < label.length; i++)
      {
        label[i].addEventListener('click', function() {
          page.className = "page bg" + (i+1);
          });
       }

Здесь цикл по i - это создание обработчиков события click для всех элементов массива label.
строка
page.className = "page bg" + (i+1);

при этом не исполняется - просто запоминается в конкретном обработчике (причем запоминается идентификатор i, а не его значение).
По завершении цикла создания обработчиков i принимает финальное значение - и больше не меняется.
При исполнении по событию click обработчика для любого элемента из списка label выполнится вышеуказанная строка, в которой будет использоваться это значение

Иллюстрация:
Вариант с использованием значения i при создании обработчика
<div style="border:1px solid black">1</div>
<div style="border:1px solid black">2</div>
<div style="border:1px solid black">3</div>
<div style="border:1px solid black">4</div>
<script>
var divs = document.querySelectorAll('div');
 for(var i = 0; i < divs.length; i++) {
   divs[i].onclick = function(x) 
      {
          return function() 
          { 
                alert(x)
          }
       }(i);
}
</script>


Вариант с использованием идентификатора i при создании обработчика
<div style="border:1px solid black">1</div>
<div style="border:1px solid black">2</div>
<div style="border:1px solid black">3</div>
<div style="border:1px solid black">4</div>
<script>
var divs = document.querySelectorAll('div');
 for(var i = 0; i < divs.length; i++) {
   divs[i].onclick = function() 
      {
               alert(i)
       };
}
</script>

Последний раз редактировалось Dilettante_Pro, 19.06.2017 в 13:57.
Ответить с цитированием