クリック アクションを含むいくつかの div と、最初の内部に別の div があります。右上隅の「close-cross」で最初の div を閉じるか、他の場所を閉じます。
問題は、close-cross div をクリックすると、メインの div クリック アクションも呼び出されることです。理論的には、マウス ボタンが押され、マウス ポインターが両方の div の上にあったため、両方がクリックされますが、直接クリックされた div のみがそのクリック イベントを呼び出すようにします。
クリック アクションを含むいくつかの div と、最初の内部に別の div があります。右上隅の「close-cross」で最初の div を閉じるか、他の場所を閉じます。
問題は、close-cross div をクリックすると、メインの div クリック アクションも呼び出されることです。理論的には、マウス ボタンが押され、マウス ポインターが両方の div の上にあったため、両方がクリックされますが、直接クリックされた div のみがそのクリック イベントを呼び出すようにします。
イベント バブリングと呼ばれるもので、これを使用して確認できます。
$(document).ready(function() {
$('#main').click(function(event) {
if (event.target == this) {
//Your code here
}
});
});
イベントのevent.stopPropagation();
ストップジャーニー
$(document).ready(function() {
$('#close-cross').click(function(event) {
//Your code here
event.stopPropagation();
});
});
メソッドを使用したいevent.stopPropagation()
。これにより、イベントが DOM ツリーにバブリングするのを防ぎます。jQueryのドキュメントはこちら
close 関数では、event.stopPropagation() を呼び出す必要があります。
http://api.jquery.com/event.stopPropagation/
これにより、イベントが親 div にバブリングするのを防ぎます。イベントバブリングの詳細:
$(document).ready(function() {
// Outer Div click Event
$('div.a').on('click', function(e) {
if (e.target.className === 'b') {
e.preventDefault();
}
else {
alert('Outer Div Clicked !!');
}
});
// Inner Div Click event
$('div.b').on('click', function(e) {
alert('Inner Div Clicked !!');
});
});