我遇到了 jquery 事件冒泡的问题。我有一个按钮,它打开一个消息框并有一个按钮,关闭它。用这两个按钮打开和关闭很容易。当我尝试通过单击#overlay div 来关闭消息框时会出现问题。
这是我的代码: HTML:
<div id="wrapper">
<button id="open">Open</button>
<div id="overlay">
<div id="message">
<p>Some error message</p>
<button id="close">Close</button>
</div>
</div>
</div>
CSS:
#wrapper {
background:#ccc;
height:500px;
position:relative;
}
#overlay {
background: rgba(0, 0, 0, 0.6);
position:absolute;
top:0;
left:0;
height:100%;
width:100%;
display:none;
}
#message {
background:#fff;
border-radius:5px;
padding:20px;
position:absolute;
top:50%;
left:50%;
margin-left:-110px;
margin-top:-100px;
width:200px;
text-align:center;
display:none;
}
#close {
color:#fff;
background:red;
cursor:pointer;
border:0;
border-radius:4px;
padding:5px 8px;
}
Javascript/jQuery:
$(function() {
// cache the body tag
var body = $('body');
// open message box
body.on('click', '#open', function(e){
$('#overlay, #message').show();
});
// close message box
body.on('click', '#close, #overlay', function(e){
$('#overlay, #message').hide();
e.stopPropagation();
});
});
这是一个演示:http: //jsfiddle.net/vnj6X/
我试图添加
// do not close message box
body.on('click', '#message', function(e){
return false;
});
但在其他情况下,我有一个登录表单,当我单击提交按钮时,它不会将表单数据发送到服务器。
谁能帮助我如何停止事件冒泡?
当我点击#overlay div而不是#message div时,我想关闭消息框div。当我单击#message div 时,它不应该做任何事情。