Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Onclick для созданных div-ов (https://javascript.ru/forum/css-html/62820-onclick-dlya-sozdannykh-div-ov.html)

BadBonus 02.05.2016 22:27

Onclick для созданных div-ов
 
Здравствуйте, я недавно начал осваивать css под браузер, возника следующая задача : Создать матрицу, каждая ячейка загорается случайным цветом при нажатии по ней клавишей, гаснет при повторном клике.
Никак не могу понять- как каждой будущей ячейке присвоить событие onclick, которое будет изменять цвет той ячейки, по которой тыкнуть.
Понимаю, что вопрос скорее всего дурацкий, но помогите решить эту проблему , пожалуйста.

код :

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" type="text/css" href="styles.css">
<script type="text/javascript">

function game()
{
	var text = document.getElementById("vvod"); //Кол-во элементов 
	val = text.value;

	var pole = document.createElement("div");
		pole.id="pole";
		document.body.appendChild(pole);
		mas = [];

for (var i = 0; i <= val; i++)//создание поля из элементов(div-ов)
		{
			var div = document.createElement("div");
			div.className="man";
			div.id="matrix";
			mas[i]=div;
			document.getElementById('pole').appendChild(mas[i]);	
		}		

	document.getElementById("but2").disabled=false;
	document.getElementById("but").disabled=true;
	
	for ( var i = 0; i <= mas.length; i++) //проблемная зона
	{
		mas[i].onclick=function()
			{
				mas[i].style.background=getRandomColor();//getRandomColor()не указана в этом коде, т.к. не влияет ни на что, кроме цвета.
			}
	}
}	

function dte()
{
	document.getElementById("but").disabled=false;
	document.getElementById("but2").disabled=true;
	for (var i = 0; i <= mas.length; i++) 
		{
			mas[i].remove();
		}	
}

</script>

</head>

<body>
<h3>Введите количество ячеек : </h3>

<input type="text" maxlength="4" size="2px" value="98" id="vvod"></input>

<button id="but" onclick="game()">"подтвердить"</button>
<button id="but2" onclick="dte()" disabled> удалить матрицу</button>
</body>
</html>

рони 02.05.2016 22:58

BadBonus,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

aklis 03.05.2016 01:26

Зачем вешать обработчики на все элементы?
Вешаем на элемент родитель, задаем каждому новосозданному диву пользовательский атрибут вида data-*
pole.onclick = function(event) {
    if (!event.target.hasAttribute('data-*')) return; // проверяем туда ли попал клик

   var elem = event.target;

    elem.style.background=getRandomColor()
  };


Вуаля, обработчик один, но обрабатывает все дивы.

рони 03.05.2016 01:34

BadBonus,
Цитата:

Сообщение от BadBonus
for ( var i = 0; i <= mas.length; i++) //проблемная зона



Часовой пояс GMT +3, время: 19:36.