Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.06.2020, 22:37
Интересующийся
Отправить личное сообщение для АртемБМ Посмотреть профиль Найти все сообщения от АртемБМ
 
Регистрация: 29.03.2020
Сообщений: 10

Не работает простейшая функция О_0
Товарищи! Задумал сделать менюшку (при клике на разные кнопки открывается разный контент). Вот такой незамысловатый код:
<div class="projects-categories">
	<button class="btn-projects-categories" id="all">All</button>
    <button class="btn-projects-categories" id="web-design">Web Design</button>
	<button class="btn-projects-categories" id="mobile-app">Mobile App</button>
	<button class="btn-projects-categories" id="illustration">Illustration</button>
	<button class="btn-projects-categories" id="photograph">Photography</button>
</div>


А вот начал писать скрипт:
let btnProjectsCategories = document.getElementsByTagName('btn-projects-categories');

btnProjectsCategories.addEventListener('click', function(){

	btnProjectsCategories.classList.add('active');

});
но почему у меня не работает даже событие клика? Говорит "Uncaught TypeError: btnProjectsCategories.addEventListener is not a function" а если навешивать "onclick" то работает только если напишу "document.querySelector('.btn-projects-categories')" с "All" не работает 0_о
Ответить с цитированием
  #2 (permalink)  
Старый 15.06.2020, 22:52
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

<div class="projects-categories">
	<button class="btn-projects-categories" id="all">All</button>
    <button class="btn-projects-categories" id="web-design">Web Design</button>
	<button class="btn-projects-categories" id="mobile-app">Mobile App</button>
	<button class="btn-projects-categories" id="illustration">Illustration</button>
	<button class="btn-projects-categories" id="photograph">Photography</button>
</div>
<script>
document.querySelector('.projects-categories').addEventListener('click', ({target})=>{
alert(target.id);
})
</script>

Пример использования делегирования событий
Ответить с цитированием
  #3 (permalink)  
Старый 15.06.2020, 23:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

АртемБМ,
если список элементов, то нужен цикл для присвоения каждому элементу своего обработчика, либо делегирование, клик на общем родителе, смотри пример выше.
https://learn.javascript.ru/event-delegation
Ответить с цитированием
  #4 (permalink)  
Старый 16.06.2020, 21:16
Интересующийся
Отправить личное сообщение для АртемБМ Посмотреть профиль Найти все сообщения от АртемБМ
 
Регистрация: 29.03.2020
Сообщений: 10

Допустим почти понял А как теперь разделить события? Тоесть при нажатии определенной кнопки показывать определенные блоки?
<div class="projects-list">
 <div class="projects-item mobile-app ">
 </div>
 <div class="projects-item photography ">
 </div>
 <div class="projects-item web-design ">
 </div>
</div>
Ответить с цитированием
  #5 (permalink)  
Старый 16.06.2020, 21:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

АртемБМ,
посмотрите второй пост и прочтите про dataset

примерно получится так https://javascript.ru/forum/misc/804...tml#post525579

Последний раз редактировалось рони, 16.06.2020 в 21:25.
Ответить с цитированием
  #6 (permalink)  
Старый 17.06.2020, 23:01
Интересующийся
Отправить личное сообщение для АртемБМ Посмотреть профиль Найти все сообщения от АртемБМ
 
Регистрация: 29.03.2020
Сообщений: 10

Начал делать вот так:
let visibility = document.querySelector('[data-projects-visibility]');

document.querySelector('.projects-categories').addEventListener('click', ({target})=>{

visibility.removeAttribute("data-projects-visibility");

if(target.id = "mobile-app"){
		visibility.dataset.projectsVisibility = "Mobile-app";
	}

if(target.id = "photography"){
		visibility.dataset.projectsVisibility = "Photography";
	}

});
но данные изменяются только при первом клике, потом ничего не работает
Ответить с цитированием
  #7 (permalink)  
Старый 18.06.2020, 09:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

АртемБМ,
= это присвоить значение!!!
== это что-то сравнить!!!
Ответить с цитированием
  #8 (permalink)  
Старый 18.06.2020, 09:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

АртемБМ,
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    .projects-list .projects-item{
        transition: .5s;
        transform: scaleY(0) translateX(-100%);
        opacity: 0;
        height: 0;
    }
    .projects-list .projects-item.visibility{
       transition: .8s;
       transform: scaleY(1)  translateX(0);
       opacity: 1;
       height: auto;
    }
    </style>
<script>
document.addEventListener('DOMContentLoaded', function() {
document.querySelector('.projects-categories').addEventListener('click', ({target})=>{
const cls = target.dataset.id;
document.querySelectorAll('.projects-list .projects-item').forEach(item => {
const add = cls == 'all' || item.classList.contains(cls);
item.classList.toggle('visibility', add)
})

})
  });
</script>
</head>
<body>
<div class="projects-categories">
	<button class="btn-projects-categories" data-id="all">All</button>
    <button class="btn-projects-categories" data-id="web-design">Web Design</button>
	<button class="btn-projects-categories" data-id="mobile-app">Mobile App</button>
	<button class="btn-projects-categories" data-id="illustration">Illustration</button>
	<button class="btn-projects-categories" data-id="photography">Photography</button>
</div>
<div class="projects-list">
 <div class="projects-item mobile-app ">mobile-app
 </div>
 <div class="projects-item photography ">photography
 </div>
 <div class="projects-item web-design ">web-design
 </div>
 <div class="projects-item illustration ">illustration
 </div>

</div>

</body>
</html>
Ответить с цитированием
  #9 (permalink)  
Старый 18.06.2020, 16:40
Интересующийся
Отправить личное сообщение для АртемБМ Посмотреть профиль Найти все сообщения от АртемБМ
 
Регистрация: 29.03.2020
Сообщений: 10

Охх тыжж... Пардон, за такую тупость
Ответить с цитированием
  #10 (permalink)  
Старый 18.06.2020, 16:49
Интересующийся
Отправить личное сообщение для АртемБМ Посмотреть профиль Найти все сообщения от АртемБМ
 
Регистрация: 29.03.2020
Сообщений: 10

Спасибо, люди добрые ! ) Наступит тот момент когда и я буду подсказывать новичкам!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает функция скролла Павел Турченко Общие вопросы Javascript 7 23.11.2015 15:28
не работает функция Dark Surv Общие вопросы Javascript 2 17.03.2015 20:05
функция MoveTo() не корректно работает ДанилаDeep Events/DOM/Window 10 29.08.2014 15:40
Почему не работает функция в атрибуте onclick? Dimaz Events/DOM/Window 7 23.07.2014 20:52
НЕ работает функция length Golovastik Серверные языки и технологии 4 14.02.2011 17:31