Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.03.2018, 21:35
Интересующийся
Отправить личное сообщение для Noga_programmista Посмотреть профиль Найти все сообщения от Noga_programmista
 
Регистрация: 13.03.2018
Сообщений: 17

Clik по div'у
Есть div в нём вложено ещё 3 div'a . Нужно чтобы после клика по одному из вложенных div'ов выводилось куда-нибудь ( в тот же alert ) его содержимое например...
написал что-то типо
<div id="id4">
				<div class="class1" style="margin-left:25%  "> 1 </div>
				<div class="class1">2 </div>
				<div class="class1" style="margin-right:10% " > 3</div>
</div>


и в window.onload = function () {}

var e = document.getElementById("id4");
	
	for(var i =0; i < e.childNodes.length; i ++){
		if(e.childNodes[i].nodeType == 1){
			e.childNodes[i].onclick = function(){
				//e.childNodes[i].innerHTML = "white"; (*) 
				alert("работает !!!");
			};
		}
	}

ВОПРОС 1 )
Объясните почему не работает строка (*) ... все перепробовал(
и подскажите как это сделать-то....

ВОПРОС 2)
Кажется (так оно и есть наверное) цикл можно было написать человеческий, типо обратиться к первым детям, а не проверять... МБ что-то путаю или недопонимаю, можете подсказать?(

Заранее Спасибо!!!

Последний раз редактировалось Noga_programmista, 29.03.2018 в 21:37.
Ответить с цитированием
  #2 (permalink)  
Старый 29.03.2018, 22:28
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

ОТВЕТ 1) К тому моменту, когда вызывается функция, назначенная onclick, переменная i всегда равна e.childNodes.length

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<div id="id4">
		<div class="class1">1</div>
		<div class="class1">2</div>
		<div class="class1">3</div>
	</div>
	<script>

		var e = document.getElementById("id4");
		
		for(var i = 0; i < e.childNodes.length; i++){
			if(e.childNodes[i].nodeType == 1){
				e.childNodes[i].onclick = (function(el) {
					return function() {
						el.innerHTML += " *";
						//alert("работает !!!");
					};
				})(e.childNodes[i]);
			}
		}

	</script>
	<style>body{font-size:300%;}.class1{background:gold;margin:1em auto;padding:1em;text-align:center;cursor:pointer;}</style>
</body>
</html>



ОТВЕТ 2) Человеческий цикл очень субъективен!!!

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<div id="id4">
		<div class="class1">1</div>
		<div class="class1">2</div>
		<div class="class1">3</div>
	</div>
	<script>

		document.getElementById("id4").addEventListener("click", function(event) {
			if(!event.target.matches(".class1")) return;

			event.target.textContent += " *";
		});

	</script>
	<style>body{font-size:300%;}.class1{background:gold;margin:1em auto;padding:1em;text-align:center;cursor:pointer;}</style>
</body>
</html>


P. S. Ещё можно так

for(let element of document.querySelectorAll("#id4 .class1")) {}

Последний раз редактировалось Malleys, 29.03.2018 в 22:42.
Ответить с цитированием
  #3 (permalink)  
Старый 29.03.2018, 22:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от Noga_programmista
Объясните почему не работает строка (*)
потому что i на момент клика уже равно e.childNodes.length -- а таких e.childNodes[i] элементов нет .
можно так
this.innerHTML = "white";

можно так
#коллекции-не-массивы
[].forEach.call

можно так
замыкания
Ответить с цитированием
  #4 (permalink)  
Старый 29.03.2018, 22:42
Интересующийся
Отправить личное сообщение для Noga_programmista Посмотреть профиль Найти все сообщения от Noga_programmista
 
Регистрация: 13.03.2018
Сообщений: 17

Блин, точно.. только сделал чтобы он выводил номер свой , разобрался в замыкании! а вот что оно тут вылезет, даже не подумал. Спасибо всем))
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ к созданному div'у из другой функции Зыкин Илья Events/DOM/Window 4 11.12.2013 00:38