Как сделать, чтобы раскрывающийся список закрывался только при нажатии снаружи?

У меня есть раскрывающийся список с множественным выбором, проблема заключается в том, что когда пользователь выбирает один элемент, раскрывающийся список закрывается.

Как сделать, чтобы раскрывающийся список закрывался только при внешнем клике?

Выпадающий список создается с помощью html ul > li:

// Here we loop trough list of filters and render options as <li> tags
 <ul name = "filters" className = "dropdown">
    {subFilters.map((filter, i) => (
      <li
        defaultChecked = {filter.name}
        onClick = {() => handleSelect(filter)}
        className = {`option`}>
        <span>{filter.name}</span>
      </li>
    ))}
  </ul>

Часть Css. Используемые классы:

  • dropdown для тега
  • option для
.dropdown {
  display: flex;
  flex-direction: column;
  min-width: 11rem;
  position: absolute;
  z-index: 1;
  font-size: 16px;
  border-radius: 3px;
  border: solid 1px #dee1e5;
  box-shadow: 0 9px 8px rgba(0, 0, 0, 0.05);
  background-color: white;
  outline: none;
  cursor: pointer;
}

.option {
  list-style-type: none;
  padding: 10px 10px 10px 0;
  margin-left: 2.6rem;
}

Вот как выглядит это раскрывающееся меню: Как сделать, чтобы раскрывающийся список закрывался только при нажатии снаружи?

stackoverflow.com/q/1403615/7203351, пожалуйста, отнеситесь к этому с пониманием. Не забывайте привязывать и отвязывать клики
shikhar 31.05.2019 09:45

Приятель, это не jquery.

Mark James 31.05.2019 09:47

возможно, этот пост из реагирующих документов может вам помочь

AsukaSong 31.05.2019 10:22
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
4
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете справиться с этим с помощью события onBlur.

Предположим, у вас есть такой фрагмент: <div class = "dropdown" onBlur = {() => this.handleBlur('myModal')}>Some content</div>

Сейчас this.handleBlur

handleBlur = modalName => {
    this.setState({ [modalName]: false });
};

Не помогло, этот метод handleBlur что должен делать? изменить состояние openDropdown на false? Не уверен, что понял вашу функцию.

Mark James 31.05.2019 09:48

Предположим, модальное состояние будет логическим. Таким образом, при условии true он будет открыт, а при условии false будет закрыт.

Meet Zaveri 31.05.2019 10:45

Например. Назначьте свойство состояния модальному значению переключения. Затем вам нужно только обновить свойство этого состояния, чтобы открыть или закрыть модальный

Meet Zaveri 31.05.2019 11:04

Другие вопросы по теме