我正在尝试在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
在我的情况是一个接触的形式:
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}>
问题内容: 我目前正在使用jQuery使div可点击,在这个div中我也有锚点。我遇到的问题是,当我单击某个锚点时,两个单击事件都已触发(对于div和锚点)。如何在单击锚点时防止div的onclick事件触发? 这是损坏的代码: JavaScript 的HTML 问题答案: 事件冒泡到DOM中已附加单击事件的最高点。因此,在您的示例中,即使div中没有其他可显式单击的元素,div的每个子元素也
问题内容: 考虑以下代码段: 现在,假设外部div有一个与之关联的活动对象。我如何确保在内部任何地方都不会触发直播? 编辑: 这是要求的JS 单击“ .inner-div”时不应触发此操作 问题答案: 您必须向内部子级添加事件侦听器,并取消事件的传播。 在普通JS中,类似 要么
问题内容: 这是我想做的事情:单击页面上的一个按钮,这又使(2)事情发生: 显示一个ModalPopup,以防止用户按下任何按钮或更改值 在方法后面调用我的代码,完成后隐藏ModalPopup 这是ASP标记: 现在,这是我在C#代码后面的代码: 为什么不起作用?ModalPopup可以完美显示,但是btnSaveData_Click事件从不触发。 更新: 第一个建议对我不起作用。我还尝试了您的第
问题内容: 我有一个具有,沿。在此之下,我还有更多元素。 目前,当我在叠加层外部单击时,我可以单击基础元素。但是,当直接在叠加层上单击时,我无法单击基础元素。 我希望能够单击此按钮,以便可以单击基础元素。 问题答案: 是的,你CAN做到这一点。 使用与IE11 CSS条件语句一起(在IE10或低于不工作),就可以得到这个问题的跨浏览器兼容的解决方案。 使用,您甚至可以将透明放置在叠加层中,并使点击
问题内容: 我想通过单击其中的关闭链接 或 单击该div外部的任何位置来隐藏div。 我正在尝试下面的代码,它可以通过单击正确的关闭链接来打开和关闭div,但是如果我在单击div以外的任何位置来关闭它时遇到问题。 问题答案: 另一种使您的jsfiddle减少错误的方法(需要双击打开)。 这不会在主体级别使用任何委托事件 设置为DIV .popup(以及样式CSS )
我有一个可拖动的元素,在它里面,我有一个带有onclick事件的组件。在拖动结束时,将触发单击事件。我的可拖动元素看起来像这样。我使用了一个名为react-draggable的包。 头盔组件内部有onClick事件,它会打开一个对话框。当我拖动并释放该元素时,将打开此对话框。我的问题是如何防止这种行为,以及如何将它们与事件分开? 谢谢