React Bootstrap 弹出窗口在外部单击时关闭
ReactBootstrap popover dismiss on click outside
ReactBootstrap 提供了一个弹窗控件。我希望以与模态框工作方式类似的方式在弹出窗口外单击时将其取消(默认情况下单击开箱即用)。
有没有办法使用 ReactBootstrap 做到这一点,或者我需要自定义代码吗?
弹出窗口的 JSfiddle:http://jsfiddle.net/226cwe4e/
React.createClass({
render: function() {
return <ReactBootstrap.OverlayTrigger trigger="click" placement="bottom" overlay={<ReactBootstrap.Popover title="Popover bottom"><strong>Holy guacamole!</strong> Check this info.</ReactBootstrap.Popover>}>
<ReactBootstrap.Button bsStyle="default">Holy guacamole!</ReactBootstrap.Button>
</ReactBootstrap.OverlayTrigger>;
}
});
我认为这对你有用:
const Hello = () => (
<ReactBootstrap.OverlayTrigger
trigger="focus"
placement="bottom"
overlay={
<ReactBootstrap.Popover title="Popover bottom">
<strong>Holy guacamole!</strong> Check this info.
</ReactBootstrap.Popover>
}
>
<ReactBootstrap.Button bsStyle="default">Holy guacamole!</ReactBootstrap.Button>
</ReactBootstrap.OverlayTrigger>
);
ReactDOM.render(<Hello />, document.getElementById('app'));
这里是jsfiddle
不,您不需要任何自定义代码。只需包含 rootClose
道具,这将为您完成。其在react bootstrap官方文档https://react-bootstrap.netlify.com/components/overlays/#overlays-api
<OverlayTrigger trigger='click' rootClose>
....
</OverlayTrigger>
对于 React Bootstrap 4.4,有必要在 rootClose
旁边添加一个 onHide
函数,这些属性也适用于 Overlay
组件(而不是 OverlayTrigger
) .
这是一个例子:
function Example() {
const [show, setShow] = useState(false);
const target = useRef(null);
const handleClick = (event) => {
setShow(!show);
};
return (
<div ref={ref}>
<Button onClick={handleClick} ref={target}>Holy guacamole!</Button>
<Overlay
show={show}
target={target.current}
placement="bottom"
rootClose
onHide={() => setShow(false)}
>
<Popover id="popover-contained">
<Popover.Title as="h3">Popover bottom</Popover.Title>
<Popover.Content>
<strong>Holy guacamole!</strong> Check this info.
</Popover.Content>
</Popover>
</Overlay>
</div>
);
}
render(<Example />);
除了@makuno 的回答。如果您希望弹出框在点击弹出框内时保持打开状态并在弹出框外点击时关闭,您可以使用以下
<OverlayTrigger trigger='click' rootClose>
<div onClick={e => {
e.stopPropagation();
e.preventDefault();
e.nativeEvent.stopImmediatePropagation();
}}>
Click me, I won't dismiss the popover
</div>
....
</OverlayTrigger>
这里要注意的关键是e.nativeEvent.stopImmediatePropagation()
声明
以上的 None 对我有用。这对我有用。我必须通过 rootCloseEvent="mousedown"
和 rootClose={true}
<OverlayTrigger
rootClose={true}
rootCloseEvent="mousedown"
trigger="click"
placement="left"
overlay={
<div className="delete--team cursor-pointer">
some text
</div>
}
>
ReactBootstrap 提供了一个弹窗控件。我希望以与模态框工作方式类似的方式在弹出窗口外单击时将其取消(默认情况下单击开箱即用)。
有没有办法使用 ReactBootstrap 做到这一点,或者我需要自定义代码吗?
弹出窗口的 JSfiddle:http://jsfiddle.net/226cwe4e/
React.createClass({
render: function() {
return <ReactBootstrap.OverlayTrigger trigger="click" placement="bottom" overlay={<ReactBootstrap.Popover title="Popover bottom"><strong>Holy guacamole!</strong> Check this info.</ReactBootstrap.Popover>}>
<ReactBootstrap.Button bsStyle="default">Holy guacamole!</ReactBootstrap.Button>
</ReactBootstrap.OverlayTrigger>;
}
});
我认为这对你有用:
const Hello = () => (
<ReactBootstrap.OverlayTrigger
trigger="focus"
placement="bottom"
overlay={
<ReactBootstrap.Popover title="Popover bottom">
<strong>Holy guacamole!</strong> Check this info.
</ReactBootstrap.Popover>
}
>
<ReactBootstrap.Button bsStyle="default">Holy guacamole!</ReactBootstrap.Button>
</ReactBootstrap.OverlayTrigger>
);
ReactDOM.render(<Hello />, document.getElementById('app'));
这里是jsfiddle
不,您不需要任何自定义代码。只需包含 rootClose
道具,这将为您完成。其在react bootstrap官方文档https://react-bootstrap.netlify.com/components/overlays/#overlays-api
<OverlayTrigger trigger='click' rootClose>
....
</OverlayTrigger>
对于 React Bootstrap 4.4,有必要在 rootClose
旁边添加一个 onHide
函数,这些属性也适用于 Overlay
组件(而不是 OverlayTrigger
) .
这是一个例子:
function Example() {
const [show, setShow] = useState(false);
const target = useRef(null);
const handleClick = (event) => {
setShow(!show);
};
return (
<div ref={ref}>
<Button onClick={handleClick} ref={target}>Holy guacamole!</Button>
<Overlay
show={show}
target={target.current}
placement="bottom"
rootClose
onHide={() => setShow(false)}
>
<Popover id="popover-contained">
<Popover.Title as="h3">Popover bottom</Popover.Title>
<Popover.Content>
<strong>Holy guacamole!</strong> Check this info.
</Popover.Content>
</Popover>
</Overlay>
</div>
);
}
render(<Example />);
除了@makuno 的回答。如果您希望弹出框在点击弹出框内时保持打开状态并在弹出框外点击时关闭,您可以使用以下
<OverlayTrigger trigger='click' rootClose>
<div onClick={e => {
e.stopPropagation();
e.preventDefault();
e.nativeEvent.stopImmediatePropagation();
}}>
Click me, I won't dismiss the popover
</div>
....
</OverlayTrigger>
这里要注意的关键是e.nativeEvent.stopImmediatePropagation()
声明
None 对我有用。这对我有用。我必须通过 rootCloseEvent="mousedown"
和 rootClose={true}
<OverlayTrigger
rootClose={true}
rootCloseEvent="mousedown"
trigger="click"
placement="left"
overlay={
<div className="delete--team cursor-pointer">
some text
</div>
}
>