1

背景の div よりも近くなるように、3 つの div ボックスが重なり合っています。ただし、背景の div には次のイベント ハンドラがあります: onclick="hideLarge();"

問題は、背景の div の可視性をブロックしているにもかかわらず、前面の div ボックスをクリックすると、実行したくない onclick 関数が引き続きトリガーされることです。

フロント div ボックスがこれらを傍受できる方法はありますか?

ありがとうございました!

4

2 に答える 2

2

DOM 構造が次のような場合:

Document
 |- BODY
     |- DIV(#1)
         |- DIV(#2)
         |- DIV(#3)
             |- DIV(#4)
             |- DIV(#5)

次に、#4、#5 をクリックすると、#3 と #1 にバブル アップし、#3 と #2 をクリックすると、#1 にバブルします。

一方、次のような構造がある場合:

Document
 |- BODY
     |- DIV(#1)
     |- DIV(#2)
     |- DIV(#3)
     |- DIV(#4)
     |- DIV(#5)

document.body と document 以外に移動する div はありません。

event.stopPropagation()イベントがバブリングするのを止めるために使用できます。例 1 の #5 にクリック リスナーをバインドするとします。

div5.addEventListener('click', function(event) {
    event.stopPropagation();
}, false);

イベントは div #3 に到達する前に停止するため、#1 にも到達しません。

#5 に複数のクリック イベントがバインドされている場合、これらは停止されません。これらを停止したい場合は、使用する必要がありますevent.stopImmediatePropagation()

IE のバージョンによっては、これを行う方法が異なることに注意してください。

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener

于 2013-06-03T13:02:39.407 に答える
1

クリックされた div が背景 div かどうかを確認します. ここで top div は 1 つ上の div の id です

function hideLarge(evt) {
if(evt.target.id!='top_div'){
//code
}
于 2013-06-03T13:01:45.463 に答える