2011-08-03 13 views
12

ポップアップを削除するクリックイベントをバインドするセレクタがあります。しかし、私は、セレクタの子の代わりに、クリックイベントを発生させるために、セレクタでクリックを処理する必要があります。子の発砲の親クリックイベントからのクリックを防止する

マイコード:

<div id="popup"> 
    <div class="popup-content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</div> 
</div> 

.popup-contentをクリックすると、私は#popupの子供たちがそうしたくないとき、それはクリックイベントを発生させます。

のjQueryコード:

$('#popup').bind('click', function() 
{ 
    $(this).remove(); 
}); 
+1

[jQueryのクリックイベントの伝播](http://stackoverflow.com/questions/2244320/jquery-click-event-propagation)の可能性が重複 –

答えて

14

試し:あなたのイベントハンドラで

e.stopPropagation(); 
return false; 

+2

'リターンfalse'をは' e.stopPropagationを呼び出すのと同じです() '*と*' e.preventDefault() 'を呼び出します。 –

+0

ああ、私は 'stopPropagation'の使用についてはあまり知らなかった、ありがとう! – MacMac

+0

+1、ありがとう、私は 'stopPropagation()'についても知らなかった –

0
$('.popup-content').bind('click', function(e) 
{ 
    e.stopPropagation(); 
}); 

または

$('.popup-content').bind('click', function(e) 
{ 
    return false; 
}); 
あなたの場合 - それは同じですが、e.stopPropagation()がなければこのようなことはできません。たとえば、次のように #popupチェック e.target == thisかのためのあなたのイベントハンドラで

$('.popup-content a').bind('click', function(e) 
{ 
    e.stopPropagation(); 
    return confirm("Are you sure?"); 
}); 
18

。すなわち:

$('#popup').bind('click', function(e) { 
    if(e.target == this) $(this).remove(); 
}); 

これを行うには、すべての子どもたちに余分なクリックハンドラを結合よりもはるかに簡単です。

+1

親のクリックを処理する代わりに、子供が自分のハンドラを持つことを許可していただきありがとうございます。正確に私が確認する必要があったもの。 if(e.target == this) 'の代わりに' if(!$(e.target).is( 'a')) 'を使っていましたが、これは正しい軌道に乗りました。 –

+0

if(!$(e.target).is( 'a'))も使う必要がありました。私は 'each'関数で使用しました(多分ループを使って解決策を決める) –

0
{if(e.target == this){ return;}}); 
関連する問題