@artekha

Как повесить событие на элемент с классом?

У меня есть три элемента с одинаковыми классами, например:
<ul>
    <li class="abc">Item 1</li>
    <li class="abc">Item 2</li>
    <li class="abc">Item 3</li>
  </ul>


Я хочу через js менять бэкграунд у li, но не знаю как сделать так что бы событие навешивалось только на тот элемент, на который я кликнул. Мне нужно делать только через addEventListener, так что через атрибут не предлагайте. Без jquery, на чистом js.
Спасибо.
  • Вопрос задан
  • 1384 просмотра
Решения вопроса 2
Примерно так. не тестировал.
var changeBg = function(){
  this.style.backgroundImage = 'url(path/to/bg.png)';
}
Array.prototype.forEach.call(document.querySelectorAll('.abc'), function(li){
  li.addEventListener('click', changeBg)
})
Ответ написан
Комментировать
@Faliah
Можно воспользоваться "делегацией" событий:
(function (document) {

  var selectedItem = null;

  document.querySelector('ul')
    .addEventListener('click', function(e) {
      if (selectedItem) {
    	  selectedItem.className = selectedItem.className.replace(' selected', '');
      }
    
      if (e.target.className.indexOf('selected') == -1) {
    	  e.target.className += ' selected';
      }   
      selectedItem = e.target;
    });
})(document);


Смотреть на jsfiddle
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
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(){
					var text = $(this).html();
                                        alert(text);
				});
			});
		</script>
	</body>
</html>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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