Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2020, 07:33
Аспирант
Отправить личное сообщение для Vahan60 Посмотреть профиль Найти все сообщения от Vahan60
 
Регистрация: 20.04.2020
Сообщений: 46

Не считывается индекс
Доброго времени суток всем.
Такой вот код:

// создаём таблицу 3Х3

let elem = document.querySelector('#elem');
createTable(elem, 3, 3);

function createTable(parent, cols, rows) {
	let table = document.createElement('table');
	
	for (let i = 0; i < rows; i++) {
		let tr = document.createElement('tr');
		
		for (let j = 0; j < cols; j++) {
			let th = document.createElement('th');
			th.className = "unit"; // присваиваем className
			tr.appendChild(th)
		};
		table.appendChild(tr)
	};
	parent.appendChild(table)
};

const alpha = ["0", "1", "2", "3", "4", "5", "6", "7", "8"];
const unit = document.getElementsByClassName("unit"); 

// вставляем элементы массива alpha в ячейки таблицы
for (i = 0; i < alpha.length; i++) {
	unit[i].append(alpha[i])
	};

let dial = document.getElementById("dial"); // находим диалоговое окно в index.html
let but = document.getElementById("but");   // находим кнопку закрытия окна в index.html
let activeUnit = -1;

for (i = 0; i < alpha.length; i++){
      unit[i].addEventListener("click", function() {
	  activeUnit = i; // запоминаем индекс ячейки по которому кликнули
	  console.log(activeUnit);
      dial.show();
      });

      but.addEventListener("click", function() {
      dial.close();
      })
};


Он должен создать таблицу, расставить по её ячейкам элементы массива, а затем (по клику на ту или другую ячейку) открыть диалоговое окно с соответствующим содержанием.
Для этого объявлена переменная activeUnit. И чтобы проверить, запомнил ли код по какой ячейке таблицы произведен клик, вывожу в консоль console.log(activeUnit).
Не запомнил. Вместо индекса ( от 0 до 8) в консоли печатается количество ячеек (9).
Более того, когда я закомментировал строки 30 и 31, то вместо того, чтобы выдать ошибку, код продолжает работать как ни в чём не бывало. По клику на ячейку открывает диалоговое окно.
Что за глюки?
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2020, 09:25
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

https://learn.javascript.ru/event-delegation
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2020, 09:39
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Почему в строке 9 вы пишите
for (let i=...
а дальше в циклах просто
for ( i= ...

Чему будет равно i выполнения цикла 34 - 44, когда при нажатии на ячейку сработает строка 36?

И зачем строки 41-43 помещать в цикл?
Ответить с цитированием
  #4 (permalink)  
Старый 01.07.2020, 13:14
Аспирант
Отправить личное сообщение для Vahan60 Посмотреть профиль Найти все сообщения от Vahan60
 
Регистрация: 20.04.2020
Сообщений: 46

Сообщение от voraa Посмотреть сообщение
Почему в строке 9 вы пишите
for (let i=...
а дальше в циклах просто
for ( i= ...
Спасибо огромное. Вчера весь день пялился в монитор, а "слона то и не приметил".
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
узнать индекс кнопки из массива Hovik Общие вопросы Javascript 0 16.12.2018 02:20
Как определить индекс инпута в блоке в такой ситуации MC-XOBAHCK Общие вопросы Javascript 6 10.09.2018 13:49
Мусол - установить индекс по убыванию wadim Общие вопросы Javascript 19 14.03.2018 09:46
получить индекс активного изображения из карусели DynkanMaclaud Events/DOM/Window 5 29.11.2014 17:40
вернуть индекс селектора ArmagedDance jQuery 1 15.12.2011 09:56