简体   繁体   English

在外部点击时实现模式关闭

[英]Implement modal close on click outside

I've been trying to implement an onclick modal close in my system. 我一直在尝试在系统中实现onclick模式关闭。 I already implemented a modal onclick event using a close button but haven't done it successfully when clicking outside the modal 我已经使用关闭按钮实现了模态onclick事件,但在模态外部单击时尚未成功完成

I already tried adding onclick listener on the div but the content is closing even clicking inside the modal window. 我已经尝试在div上添加onclick侦听器,但是即使在模式窗口内单击,内容也将关闭。

<div
                className={"Overlay " + (this.state.hidden? "hidden": "show")}
                id={this.props.id + "-container"} onClick={() => {
                this.setState({ hidden: true })
            }}>

here's my modal box rendering code so far 到目前为止,这是我的模态框渲染代码

 render() {
        const contentClassName = this.getContentClassName();

        if (this.props.show) {
            document.body.style.overflow = 'hidden';
        }

        const contentStyle = {
            width: this.props.width,
            height: this.props.height,
            position: "relative"
        };

        return (
            <div
                className={"Overlay " + (this.state.hidden? "hidden": "show")}
                id={this.props.id + "-container"} onClick={() => {
                this.setState({ hidden: true })
            }}>
                <div className={contentClassName}>
                    <div className={"Overlay-container"} style={contentStyle}>
                        <a id={this.props.id + '-closeButton'}
                           className="Overlay-closeBtn icon-close-zoom" onClick={() => {
                               this.setState({ hidden: true })
                        }}/>
                        {this.props.children}
                    </div>
                </div>
            </div>
        );
    }

as expected i want the modal to be close when clicking outside the modal window. 如预期的那样,我希望在模态窗口外单击时关闭模态。 currently it's closing even after clicking the modal window. 当前,即使在单击模式窗口后也将关闭。

<script>
$('html').click(function(e) {
        if(!$(e.target).hasClass("Overlay-container")) {
             document.getElementById('Overlay-container').style.display = "none" 
        } 
});
</script>

your code switch the state show or hidden when you click on it(Of course you can't click closed one) 您的代码在单击状态显示或隐藏状态时切换状态显示(当然您不能单击关闭状态)

This function works when your click has no class element named "Overlay-container" 当您的单击没有名为“ Overlay-container”的类元素时,此功能有效

//add description //添加描述
when you click your 'html', 'if' checks where you clicked and has class 'Overlay-container'. 当您单击“ html”时,“ if”会检查您单击的位置并具有“ Overlay-container”类。 And if there's no 'Overlay-container' on your click point, modal close. 如果点击点上没有“覆盖容器”,则模式关闭。

Manage to solved this by doing this one 通过做到这一点设法解决这一问题

onClickOutside(e){
        if (e.target.classList.contains('Overlay-content') || e.target.classList.contains('Overlay-container')) {
            this.setState({
                hidden: true
            })
        }
    }
<div
                className={"Overlay " + (this.state.hidden? "hidden": "show")}
                id={this.props.id + "-container"}>
                <div className={contentClassName} onClick={(e)=>{
                    this.onClickOutside(e);

                }}>
                    <div className={"Overlay-container"} style={contentStyle}>
                        <a id={this.props.id + '-closeButton'}
                           className="Overlay-closeBtn icon-close-zoom" onClick={(e) => {
                               this.onClickHide(e)
                        }}/>
                        {this.props.children}
                    </div>
                </div>
            </div>

Thanks! 谢谢!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM