最も単純な方法から始めましょう。ページに test という ID を持つ div がある場合、ページ上の他の場所をクリックして div を非表示にする必要があります。
この問題には一般に 2 つの考え方があります。どちらもイベント バブリングの原理を使用します。JavaScript のイベント メカニズムについて詳しく知りたい場合は、
JavaScript と HTML の相互作用を参照してください。 - イベント、この記事の焦点ではないため、ここではイベント バブリングについて簡単に紹介します。
イベントバブリング
IE のイベント バブリング: イベントは最初に最も具体的な要素によって受信され、その後、より具体的な要素に上方に伝播します
Netscape のイベント キャプチャ: イベント バブリングとは対照的に、特定性の低いノードはイベントを早く受け取り、最も特定的な要素は最後にイベントを受け取ります。
DOM イベント フロー: DOM レベル 2 イベントでは、イベント フローに、ターゲット ステージにあるイベント キャプチャ ステージと、イベント バブリング ステージの 3 つのステージが含まれると規定されています。最初に行われるのは、イベント キャプチャです。イベントを傍受する機会があり、その後実際のターゲットがイベントを受け取り、最後にバブル文の段階になります。
Opera、Firefox、Chrome、Safari はすべて DOM イベント ストリーミングをサポートします。IE はイベント ストリーミングをサポートせず、イベント バブリングのみをサポートします。
次の HTML がある場合、div 領域をクリックすると、さまざまなモデル イベント要素のクリック イベント トリガー シーケンスは次のようになります。
テストページ< /title>
ここをクリック
< /html>
DOM 上のイベントがトリガーされると、イベント オブジェクト イベントが生成されます。イベントを生成した要素、イベント タイプ、およびその他の関連情報。すべてのブラウザはイベント オブジェクトをサポートしますが、その方法は異なります。イベント オブジェクトには、イベントのバブルまたはキャプチャの継続を防ぐメソッド (W3C: stopPropagation)/プロパティ (IE: cancelBulle=true) があります。イベントが要素にバブルアップするときにバブリングを防止したい場合は、次のようなブラウザー互換のメソッドを作成できます:
コードをコピー
コードは次のとおりです。function stopPropagation(e) {//Passイベント オブジェクト Enter
if (e.stopPropagation) //W3C 標準をサポート
e.stopPropagation();
else //IE8 以下のブラウザ
e.cancelBubble = true;
}
すべてのブラウザがイベント バブリングをサポートしているため、ブラウザの互換性を考慮して、イベントをバインドするときは通常、イベント キャプチャではなくイベント バブリングを使用します。これを理解した上で、次の 2 つの考え方を考えることができます。
アイデア 1
最初のアイデアは 2 つのステップに分かれています
ステップ 1: イベント ハンドラーをドキュメントのクリック イベントにバインドして div を非表示にします
ステップ 2: イベント ハンドラーを div のクリック イベントにバインドして、イベントがドキュメントにバブリングするのを防ぎ、ドキュメントの onclick メソッドを呼び出すと div が非表示になります。