状況:
<div class="header">
<div style="float: left;" class="headerTitle">+ OPEN</div>
<div class="closeBtn" style="float: right;">- CLOSE</div>
</div>
<div class="touristenContent">.....</div>
視覚的に:
| +開く.............................. |-閉じる| .. | (ヘッダー) | ............コンテンツ....................... ... |
ヘッダーDIVは、コンテンツを開くためのjQuery click()イベントを持つ「大きなボタン」です。閉じるDIVは大きなヘッダーDIV内にあり、閉じるボタンもclick()イベントで表し、コンテンツを閉じます。この閉じるボタンは、大きなヘッダーをクリックすることでのみ表示されます。
ヘッダーをクリックしてコンテンツを反対にすることは期待どおりに機能しますが、閉じるボタンをクリックすると、ヘッダーDIVまでクリックイベントが通過します。 2回のクリックイベントが発生したため、コンテンツが閉じて再び開きます。
閉じるボタンを固体にし、クリックしてヘッダーに到達しないように、全体を適切に設計するにはどうすればよいですか?
イベントの伝播を停止する DOMツリーを上にする必要があります。
$('.closeBtn').click(function (evt) {
evt.stopPropagation();
// Your code here
});
$('.closeBtn').click(function (event){
event.stopPropagation();
// ... your code here
return false;
});
これでうまくいくはずなので、閉じるをクリックするたびにヘッダーdivに影響はありません。
親divではなく<div style="float: left;" class="headerTitle">+ OPEN</div>
でopenイベントをフックしないのはなぜですか。それ以外の場合、return false
またはstopPropagation
内のdivクリックハンドラーから