Задать вопрос
@webman2004

Как выдать alert с содержимым того li, по которому был клик?

Всем привет! Не могу разобраться, хелп ми, плиз! Задача: выдать alert с содержимым того li, по которому был клик. При моем коде, на какой бы li не был клик всегда выдает только "3-й ли". В чем ошибка?
код на jsfiddle

<ul style="list-style:none;" id="menu_ul">
<li id="cl">1й ли</li>
<li id="cl">2-й ли</li>
<li id="cl">3й ли</li>
</ul>

function say(){
	alert(cl2);
}

for (var i = 0; i < cl.length; i++) {
		var cl2 = cl[i].innerHTML;
		cl[i].addEventListener("click", say);
		}
  • Вопрос задан
  • 178 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
BuriK666
@BuriK666
Компьютерный псих
document.getElementById('menu_ul').addEventListener('click', function(e) {
  alert(e.target.innerText);
});

Если внтури Li будут другие элементы, то нужно смотреть parent, пока не доберешься до Li
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Можно реализовать на jQuery:
<ul style="list-style:none;" class="menu">
  <li class="cl">1й ли</li>
  <li class="cl">2-й ли</li>
  <li class="cl">3й ли</li>
</ul>

$(document).ready(() => {
	$('.menu').on('click', '.cl', onListItemClick)
})

function onListItemClick() {
	alert(this.innerHTML)
}
Ответ написан
Комментировать
inblank
@inblank
Full Stack Web Developer
Всегда 3-й потому, что при выходе из цикла навешивания обработчиков переменная cl2 это 3-й li, им и остается.
say() получает доступ к переменной cl2 через замыкание.

И да, одинаковые id это очень плохо.
Ответ написан
RomanticOS
@RomanticOS
webDeveloper
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>StarHunter</title>
		<link rel="stylesheet" type="text/css" href="style/style.css">
		<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
	</head>
	<body>
		<header>
			<nav></nav>
		</header>
		<ul>
			<li class="li">1111</li>
			<li class="li">2222</li>
			<li class="li">3333</li>
		</ul>
		<script>
			$(document).ready(function(){
				$(".li").click(function(){
					$(this).css("color", "red");
				});
			});
		</script>
	</body>
</html>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы