Задать вопрос
BenderIsGreat34
@BenderIsGreat34
junior front-end

Как отслеживать нажатие нескольких кнопок в форме одновременно?

У меня есть две формы, одна на логин, другая на регистрацию, как я могу без дубляжа кода отслеживать сразу несколько кликов для дальнейших действий?
На данный момент у меня такая логика:
// смена табов логина/регистрации

    const login = document.querySelector('.link-login');
    const register = document.querySelector('.link-register');
    const formContainer = document.querySelectorAll('.form-login__form-wrapper');

    login.addEventListener('click', (e) => {
        const active = document.querySelector('.form-login__header-link.active');
        e.preventDefault();
        if (login !== active) {
            login.classList.toggle('active');
            register.classList.toggle('active');


            formContainer[0].classList.toggle('none');
            formContainer[1].classList.toggle('none');
        }
    });

    register.addEventListener('click', (e) => {
        const active = document.querySelector('.form-login__header-link.active');
        e.preventDefault();
        if (register !== active) {
            register.classList.toggle('active');
            login.classList.toggle('active');

            formContainer[0].classList.toggle('none');
            formContainer[1].classList.toggle('none');
        }
    });

Но на мой взгялд это очень плохое решение, ведь если добавится ещё один таб или количество форм вырастет, то код будет дублироваться.
Я бы хотел отслеживать клик на табы логина и регистрации и в зависимости от того, на какой был клик - показывать ту форму. Я пытался решить вопрос через forEach, но я так понял он при запуске скрипта отрабатывает один раз и всё, так же мне кажется бесконечный цикл не вариант - систему повесит, что я могу сделать?
  • Вопрос задан
  • 298 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Для «двухклавишного» выключателя можно предложить такой общий обработчик кликов:
const handler = (e) => {
  e.preventDefault();
  const active = document.querySelector('.form-login__header-link.active');
  const target = e.target;
  if (target === active) return;

  [register, login].forEach(el => el.classList.toggle('active'));
  [...formContainer].forEach( el => el.classList.toggle('none'));
}

login.addEventListener('click', handler);
register.addEventListener('click', handler);


e.target – кликнутый элемент.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AleksRap
Создайте класс табы - будете использовать везде, не только в этой ситуации.

Обработчики кликов добавляйте не кнопкам переключения, а их обертке. Затем по всплытию события смотрите что нажато, если нужная кнопка, то функция выполняется дальше, если нет, то функция прерывается. У каждый кнопки должно быть значение указывающее, на то, какой таб она открывает
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
Wanted. Москва
от 250 000 до 400 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
23 янв. 2025, в 12:21
90000 руб./за проект
23 янв. 2025, в 12:08
10000 руб./за проект
23 янв. 2025, в 12:07
20000 руб./за проект