これが伝播を停止するようには見えません。
$(document).ready(function(){
$("body").on("click","img.theater",function(event){
event.stopPropagation();
$('.theater-wrapper').show();
});
// This shouldn't fire if I click inside of the div that's inside of the
// `.theater-wrapper`, which is called `.theater-container`, anything else it should.
$(".theater-wrapper").click(function(event){
$('.theater-wrapper').hide();
});
});
on
要素では直接body
を使用しており、img.theater
では直接使用していないため、イベントはbody
要素までバブルアップし、それが機能します。
イベントバブリングの過程で.theater-wrapper
要素click
イベントがトリガーされるため、表示されます。
動的要素を作成しない場合は、img.theater
要素にクリックイベントハンドラーを直接アタッチします。
$("img.theater").click(function(event){
event.stopPropagation();
$('.theater-wrapper').show();
});
または、.theater-wrapper
要素click
ハンドラー内のclick
イベントのターゲットを確認し、何もしないこともできます。
$(".theater-wrapper").click(function(event){
if ($(event.target).is('img.theater')){
event.stopPropagation();
return;
}
$('.theater-wrapper').hide();
});
これを行う最善の方法は次のとおりです。
$(".theater-wrapper").click(function(event){
if (!$(event.target).is('img.theater')){
$('.theater-wrapper').hide();
}
});
アコーディオンとチェックボックスでそれは私のために働いています
あなたのjsfiddle @Dylanに応答します
ここ:白いスポットをクリックしても、閉じないはずです。 jsfiddle.net/Cs8Kq -ディラン
変化する
if ($(event.target).is('img.theater')){
に
if ($(event.target).is('.theater-container')){
そしてそれは動作します。
これを解決するには、イベントハンドラーでconsole.log(event.target)を使用し、話している白い領域をクリックしたときにログアウトしたセレクターを使用します。
代わりにコメントを書いたのですが、SOスターダストとコインが足りません。
編集:このように jsfiddle.net/heNP4/
event.stopImmediatePropagation()を使用してください