我正在使用react-bootstrapbootstrap元素添加到我的应用程序中。我需要添加一个下拉按钮,其中包含一个“标签”列表,用户可用来标记其商品。

我的问题是添加输入字段,以便他们可以添加“自定义”标签。当前外观如下(蓝色方块为复选框):

javascript - 带输入字段的下拉列表-LMLPHP

首先,我尝试了:

<Dropdown id="myDropdown">
    <Dropdown.Toggle bsStyle="warning">Label as...</Dropdown.Toggle>
    <Dropdown.Menu>
        <li onSelect={...}>
            <Checkbox onClick={...} checked={...} inline>Some label</Checkbox>
        </li>
        <li onSelect={...}>
            <Checkbox onClick={...} checked={...} inline>Some other label</Checkbox>
        </li>
        <li><input /></li>
    </Dropdown.Menu>
</Dropdown>


但是,当您单击dropdown元素时,这将关闭input

因此,我尝试对官方文档中显示的示例进行细微改动(搜索“ Custom Dropdown Components”并查看代码)。这使我可以单击并键入input,但是当我在元素外部单击时,下拉列表不会关闭。



TL; DR

如何获得一个下拉菜单,使我可以单击在菜单外单击时也会关闭的input字段?

编辑:

为第二个实现添加生成的html:

<div class="dropdown btn-group">
  <button type="button" class="dropdown-toggle btn btn-warning"><i class="fa fa-check" aria-hidden="true"></i><!-- react-text: 153 --> <!-- /react-text --><!-- react-text: 154 -->Label as...<!-- /react-text --><!-- react-text: 155 --> <!-- /react-text --><span class="caret"></span></button>
   <ul class="dropdown-menu">
     <li><label class="checkbox-inline"><input type="checkbox" value="on"><span></span><!-- react-text: 162 --> Some label<!-- /react-text --></label></li>
     <li><label class="checkbox-inline"><input type="checkbox" value="on"><span></span><!-- react-text: 167 --> Some other label<!-- /react-text --></label></li>
     <li><label class="checkbox-inline"><input type="checkbox" value="on"><span></span><input type="text" value="" style="height: 17px;font-size: .9em;"></label></li>
     <li role="separator" class="divider"></li>
     <li role="presentation" class=""><a role="menuitem" tabindex="-1" href="#">Clear labels</a></li>
   </ul>
 </div>

最佳答案

因此,几天前我找到了答案,我会在此处发布该答案,以防将来有人偶然发现此答案。

您需要安装react-overlays并导入ReactRootWrapper。修改示例代码(来自docs中的Custom Dropdown Component),该组件现在应类似于:

<RootCloseWrapper onRootClose={this.setOpenStateToFalse}>
  <Dropdown id="dropdown-custom-menu" open={this.state.open} onToggle={this.toggleOpenState}>
    <CustomToggle bsRole="toggle">Custom toggle</CustomToggle>
    <CustomMenu bsRole="menu">
      <MenuItem eventKey="1">Red</MenuItem>
      <MenuItem eventKey="2">Blue</MenuItem>
      <MenuItem eventKey="3" active>Orange</MenuItem>
      <MenuItem eventKey="1">Red-Orange</MenuItem>
    </CustomMenu>
  </Dropdown>
</RootCloseWrapper>


我没有在示例中添加函数,但是它们的名称说明了它们的作用。基本上setOpenStateToFalse()需要始终将this.state.open设置为false,而toggleOpenState()需要反转当前this.state.open的布尔值。

希望有人觉得这有用。

关于javascript - 带输入字段的下拉列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40840042/

10-16 23:22