【问题标题】:How to make dropdown to be closed only on click-outside?如何使下拉菜单仅在点击外部时关闭?
【发布时间】:2019-10-16 20:08:44
【问题描述】:

我有多选下拉菜单,问题是当用户选择一项时 - 下拉菜单已关闭。

如何使该下拉菜单仅在外部点击时关闭?

下拉是由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;
}

下拉列表的外观如下:

【问题讨论】:

标签: javascript css reactjs sass


【解决方案1】:

您可以通过onBlur 事件处理此问题。

假设你有这样的 sn-p : &lt;div class="dropdown" onBlur={() =&gt; this.handleBlur('myModal')}&gt;Some content&lt;/div&gt;

现在this.handleBlur

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

【讨论】:

  • 没有帮助,这个handleBlur方法应该怎么做?将openedDropdown的状态更改为false?不确定是否理解您的功能。
  • 假设模态将有一个布尔状态。所以在true 条件下它将被打开,在false 条件下它将被关闭。
  • 例如。将 state 的属性分配给 modal 的切换值。然后您只需更新该状态的属性即可打开或关闭模式
猜你喜欢
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 2019-08-02
  • 2017-02-12
  • 2017-03-23
  • 2023-02-23
相关资源
最近更新 更多