【问题标题】:Allow activeElement to be selected on mouse event允许在鼠标事件上选择 activeElement
【发布时间】:2019-03-11 21:31:25
【问题描述】:

在尝试将项目悬停在下拉建议菜单中时,我正在尝试将该项目设置为 activeElementactiveIndex。但是键盘up/down 箭头停止使用此更改。我希望 up/down 箭头键也可以从 activeIndex 中工作。怎么做?这是我的代码

  public itemFocus = (e: any) => {
    let ce = e.currentTarget.id.toString();
    ce = ce.substring(ce.length - 1);
    this._typeahead.getInstance().setState({
      activeIndex: ce,
      activeItem: this.state.options[ce]});
  }

idx 表示结果的迭代器索引

<MenuItem onMouseOver={this.itemFocus} key={idx} option={state} position={idx}>

【问题讨论】:

    标签: reactjs react-bootstrap-typeahead


    【解决方案1】:

    您似乎走在了正确的轨道上,尽管有更简单的方法可以获取悬停项目的索引和数据。以下应该有效:

    注意:以下解决方案不受 API 官方支持,如果包内部发生变化,可能会在没有警告的情况下中断。

    <Typeahead
      options={[ ... ]}
      ref={(typeahead) => this._typeahead = typeahead}
      renderMenu={(filteredOptions, menuProps) => (
        <Menu {...menuProps}>
          {filteredOptions.map((option, index) => (
            <MenuItem
              onMouseOver={() => {
                this._typeahead.getInstance().setState({
                  activeIndex: index,
                  activeItem: option,
                });
              }}
              option={option}
              position={index}>
              {option}
            </MenuItem>
          ))}
        </Menu>
      )}
    />
    

    工作示例:https://codesandbox.io/s/ojz4kzn2vq

    【讨论】:

    • 在对菜单项进行分组时,是否需要不同的方法来做同样的事情。箭头键不适用于那些 -> codesandbox.io/s/m751pvkn8p
    • 它不起作用的原因是因为idx 在上限范围内递增,因此在调用onMouseOver 处理程序时始终为50。您需要在声明项目的同一范围内声明每个项目的索引。以下应该有效:codesandbox.io/s/wwv1jkyqp5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多