react-bootstrap - React-bootstrap 弹出窗口在内容悬停时关闭

标签 react-bootstrap

我有 OverlayTriggertrigger='hover'。当我将光标移出弹出窗口时,这里的预期行为是隐藏弹出窗口。但是,当我将光标移出按钮时,库会隐藏弹出窗口,即

<OverlayTrigger trigger='hover' placement='left' overlay={
  <Popover>
    ... content ...
  </Popover>
  }>
  <Button bsStyle='default'>name</Button>
</OverlayTrigger>

因此,当光标离开弹出窗口内容上的按钮时(例如,如果我想单击那里的链接),它就会消失。

有什么解决办法吗?

最佳答案

我刚刚开始学习 React。我对此的解决方案是将 trigger 选项设置为 "manual",并添加 onMouseOver={fn}onMouseOut={fn } 手动显示和隐藏 PopOver 内容。这是我的示例代码:

var popOver_timer;
var Pop = React.createClass({
  mixins: [TimerMixin],
  mouseOverhandler: function() {
    this.clearTimeout(popOver_timer);
    this.refs.pop.show();
  },
  mouseOuthandler: function() {
    popOver_timer = this.setTimeout(
      ()=> {this.refs.pop.hide();},
      50
    );
  },
  render: function() {
    return (
      <div onMouseOver={this.mouseOverhandler} onMouseOut={this.mouseOuthandler}>     
        <OverlayTrigger ref="pop" placement="bottom" trigger="manual" container={document.body} overlay={
          <Popover onMouseOver={this.mouseOverhandler} onMouseOut={this.mouseOuthandler}>
            <a href="/">This Page</a>
          </Popover>}>
          <a href={this.props.popUsrUrl}>
            <button>PopOver</button>
          </a>
        </OverlayTrigger>
      </div>
    );
  }
});

除了 react-boostrap,我还需要 react-time-mixin 并使用 react-setTimeout。这是因为当你的鼠标从按钮移动到popover内容时,会先触发onMouseOut,然后是onMouseOver。因此,onMouseOut 应该设置一个延时。我将它设置为 50 毫秒。希望对您有所帮助。

关于react-bootstrap - React-bootstrap 弹出窗口在内容悬停时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29985963/

相关文章:

css - 使用 React 创建网格布局

css - 如何将嵌入式 radio 控件放入React-Bootstrap?

javascript - 使用 React-Bootstrap ListGroup 通过 onClick 触发函数

reactjs - 如何向 React-Bootstrap 组件添加类名/id?

javascript - 可以从reactjs中的事件处理函数访问选项标签元素的键吗?

javascript - 链接和按钮未对齐

javascript - 我的 React 版本有问题

reactjs - 将 Bootstrap 组件与 Reactjs 一起使用

reactjs - 悬停时的 React-Bootstrap 下拉菜单

javascript - 如何使用ReactJS和Axios上传文件