我正在尝试在React JS中创建一个模式
我有一个外部div,它是整个身体,而我有一个内部div。如果要在内部div之外单击它,我想应用该函数以关闭模式。
我的代码如下:
popupOutterDivStyle() { return { zIndex: 10000, position: "fixed", width: "100%", height: "100%", top: 0, left: 0, background: "rgba(102,102,102,0.8)" } } popupInnerDivStyle() { return { zIndex: 20000, position: "fixed", width: "70%", top: "50%", left: "50%", height: "400px", marginTop: "-200px", /*set to a negative number 1/2 of your height*/ marginLeft: "-35%", /*set to a negative number 1/2 of your width*/ background: "rgba(255,255,255,1)", display: 'block' } } closePopupIcon() { return { position: "absolute", right: -25, top: - 27, zIndex: 30000, cursor: "pointer" } } render() { const animationSettings = { transitionName: "example", transitionEnterTimeout: 500, transitionAppearTimeout: 500, transitionLeaveTimeout: 500, transitionAppear: true, transitionLeave: true }; return ( <div onClick={this.props.closeModal}> <ReactCSSTransitionGroup {...animationSettings}> <div key={this.props.modalState} style={this.popupOutterDivStyle()} className={showModal}> <div style={this.popupInnerDivStyle()}> <a href="#" style={this.closePopupIcon()} onClick={this.props.closeModal}><i className="closePopup ion-ios-close-empty" /></a> {this.props.children} </div> </div> </ReactCSSTransitionGroup> </div> ); }
当我单击带有图标的链接时,或者在内部div外部单击时,它都可以正常工作。
但是问题是,如果我在内部div中单击,它也会关闭。
我不想使用jQuery。
有什么建议吗?
更新
stopPropagation(event){ event.stopPropagation(); } <div> <ReactCSSTransitionGroup {...animationSettings}> <div id="outter" key={this.props.modalState} style={this.popupOutterDivStyle()} className={showModal} onClick={this.props.closeModal}> <div id="inner" style={this.popupInnerDivStyle()} onClick={this.stopPropagation.bind(this)}> <a href="#" style={this.closePopupIcon()} onClick={this.props.closeModal}><i className="closePopup ion-ios-close-empty" /></a> {this.props.children} </div> </div> </ReactCSSTransitionGroup> </div>
而this.props.children在我的情况是一个接触的形式:
this.props.children
export default class ContactForm extends React.Component { constructor(props) { super(props); this.state = { senderName: '', email: '', message: '', errors: {} }; this.sendingHandle = this.sendingHandle.bind(this); this.contactHandle = this.contactHandle.bind(this); } contactHandle(event) { let field = event.target.name; let value = event.target.value; console.log(field); } sendingHandle(event) { event.preventDefault(); } render() { const language = this.props.currentLanguage.homePage; return ( <div className="contact-form"> <form> <div className="col-lg-12 col-md-12 col-sm-12 col-xs-12"> <TextInput type="text" name="senderName" label={language.contactNameLabel} labelClass="contactLabel" placeholder={language.contactNameLabel} className="templateInput" icon="user" iconSize="15x" iconClass="contactFaIcon" onChange={this.contactHandle} value={this.state.name} errors={this.state.errors.senderName} /> </div> <div className="col-lg-12 col-md-12 col-sm-12 col-xs-12"> <TextInput type="text" name="email" label={language.contactEmailLabel} labelClass="contactLabel" placeholder={language.contactEmailLabel} className="templateInput" icon="envelope-o" iconSize="15x" iconClass="contactFaIcon" onChange={this.contactHandle} value={this.state.email} errors={this.state.errors.email} /> </div> <div className="col-md-12 col-sm-12 col-xs-12"> <Textarea className="message" name="message" placeholder={language.contactMessageLabel} label={language.contactMessageLabel} labelClass="contactLabel" icon="comments-o" iconSize="15x" iconClass="contactFaIcon" onChange={this.contactHandle} errors={this.state.errors.message} /> </div> <div className="col-lg-12 col-md-12 col-sm-12 col-xs-12 text-center"> <Button text="Verzenden" handleClick={this.sendingHandle.bind(this)}/> </div> </form> <div className="clearfix" /> </div> ); } }
将一个函数附加到内部div上,以停止传播。
function stopPropagation(e) { e.stopPropagation(); }
就你而言 <div style={this.popupInnerDivStyle()} onClick={stopPropagation}>
<div style={this.popupInnerDivStyle()} onClick={stopPropagation}>