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

Как в JavaScript привязать событие по нажатию клавиши Esc на два разных элемента?

Всем привет!

На сайте настроен скрипт убирающий классы с двух разных элементов при нажатии на клавишу Esc.
Скрипты не должны срабатывать одновременно.

Подскажите, как можно переписать текущий код, более правильно. Буду благодарен за любые советы!

document.addEventListener('keydown', function (e) {
    if(e.keyCode === 27) var element = document.getElementById("popupClinet");
    element.classList.remove("popup--open");
});
document.addEventListener('keydown', function (e) {
    if(e.keyCode === 27) var element = document.getElementById("popupPartner");
    element.classList.remove("popup--open");
});
  • Вопрос задан
  • 2149 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик расширенный
    13 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Вместо того, чтобы пытаться получать отдельные элементы (кстати, возможно, несуществующие - где проверка, что элемент действительно нашёлся?), можно сочинить селектор, соответствующий всем элементам, получить коллекцию и перебрать её. Что это может быть за селектор? - да селектор по классу, который надо удалить. Вот так всё просто получается:

const className = 'popup--open';

document.addEventListener('keydown', e => {
  if (e.key === 'Escape') {
    document.querySelectorAll(`.${className}`).forEach(n => {
      n.classList.remove(className);
    });
  }
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
Если попапы одновременно могут быть открыты, то надо вешать keydown на сам попап, а не на весь документ.

А если открыт всегда только какой-то один, то какая разница сработают оба кода или нет? Он же не закроет закрытый попап еще сильнее.
Ответ написан
Ваш ответ на вопрос

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

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