[已解决]如何取消 "bootstrap modal" 退出行为?
[RESOLVED]How to cancel "bootstrap modal" exit behavior?
在用户打算通过关闭按钮或背景区域关闭模式之前,我需要验证数据(例如填写表单中的所有字段)。
如果它有效则让退出过程继续,否则取消它。
<Modal show={isShow} keyboard={false} >
<Modal.Header>
<Modal.Title>Profile</Modal.Title>
<CloseButton onClick={onClose} />
</Modal.Header>
<Modal.Body>
{...}
</Modal.Body>
</Modal>
在 React 中可以做到这一点吗?
解决方案
根据Modal#onHide的描述,我收听onHide
然后在关闭它之前验证数据。
const onModalHide = () => {
if (validateData()) setIsShow(false);
};
<Modal show={isShow} onHide={onModalHide} >
<Modal.Header>
<Modal.Title>Profile</Modal.Title>
</Modal.Header>
<Modal.Body>
{...}
</Modal.Body>
</Modal>
我猜 onClose
正在改变 isShow
状态。
在这种情况下,只需检查您是否要关闭模态:
const onClose = () => {
if(validateFormLogic()) //this is where you validate your form
setIsShow(false);
}
<Modal show={isShow} keyboard={false} >
<Modal.Header>
<Modal.Title>Profile</Modal.Title>
<CloseButton onClick={onClose} />
</Modal.Header>
<Modal.Body>
{...}
</Modal.Body>
</Modal>
您决定何时关闭模式,而不是bootstrap也不做出反应。
您将需要手动 select 模态 ID 并监听 hide.bs.modal
事件
您正在使用 bootstrap 所以可能已经导入 jquery 所以:
$('#myModal').on('hide.bs.modal', function (e) {
if (!validated) return e.preventDefault()
})
或者用js:
document.addEventListener('hide.bs.modal', function(e) {
if (event.target.id == 'myModal') {
if (!validated) return e.preventDefault();
}
});
在用户打算通过关闭按钮或背景区域关闭模式之前,我需要验证数据(例如填写表单中的所有字段)。
如果它有效则让退出过程继续,否则取消它。
<Modal show={isShow} keyboard={false} >
<Modal.Header>
<Modal.Title>Profile</Modal.Title>
<CloseButton onClick={onClose} />
</Modal.Header>
<Modal.Body>
{...}
</Modal.Body>
</Modal>
在 React 中可以做到这一点吗?
解决方案
根据Modal#onHide的描述,我收听onHide
然后在关闭它之前验证数据。
const onModalHide = () => {
if (validateData()) setIsShow(false);
};
<Modal show={isShow} onHide={onModalHide} >
<Modal.Header>
<Modal.Title>Profile</Modal.Title>
</Modal.Header>
<Modal.Body>
{...}
</Modal.Body>
</Modal>
我猜 onClose
正在改变 isShow
状态。
在这种情况下,只需检查您是否要关闭模态:
const onClose = () => {
if(validateFormLogic()) //this is where you validate your form
setIsShow(false);
}
<Modal show={isShow} keyboard={false} >
<Modal.Header>
<Modal.Title>Profile</Modal.Title>
<CloseButton onClick={onClose} />
</Modal.Header>
<Modal.Body>
{...}
</Modal.Body>
</Modal>
您决定何时关闭模式,而不是bootstrap也不做出反应。
您将需要手动 select 模态 ID 并监听 hide.bs.modal
事件
您正在使用 bootstrap 所以可能已经导入 jquery 所以:
$('#myModal').on('hide.bs.modal', function (e) {
if (!validated) return e.preventDefault()
})
或者用js:
document.addEventListener('hide.bs.modal', function(e) {
if (event.target.id == 'myModal') {
if (!validated) return e.preventDefault();
}
});