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, но я так понял он при запуске скрипта отрабатывает один раз и всё, так же мне кажется бесконечный цикл не вариант - систему повесит, что я могу сделать?
  • Вопрос задан
  • 293 просмотра
Решения вопроса 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
Создайте класс табы - будете использовать везде, не только в этой ситуации.

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

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

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