jquery イベントのバブリングに問題があります。メッセージボックスを開くボタンと閉じるボタンがあります。2つのボタンで簡単に開閉できます。#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 をクリックしたときにメッセージ ボックス div を閉じたいのですが、#message div では閉じません。#message div をクリックしても、何も実行されません。