1. イベント処理モデルイベント バブリングとイベント キャプチャリング: イベント バブリングとイベント キャプチャリングは、それぞれ Microsoft と Netscape によって提案されました。どちらの概念も、ページ内のイベント フロー (イベントが発生する順序) の問題を解決することを目的としています。 <div id="d1"> <div id="d2"> <div id="d3"></div> </div> </div> 3 つのネストされた div がある場合、3 つの要素に同じイベントが登録されると、それらのトリガー順序はどのようになりますか? 1. イベントバブリングMicrosoft は、イベント バブリングと呼ばれるイベント ストリームを提案しました。構造的に(視覚的にではなく)ネストされた要素にはバブリング機能があり、つまり同じイベントが子要素から親要素にバブリングします。 (ボトムアップ) 上記の例では、バブリング方式を使用する場合、トリガー順序は d3——>d2——>d1 となるはずなので、確認してみましょう。 (1)3つのdiv要素にイベントをバインドする//1. 要素を取得する var d1 = document.querySelector('#d1') var d2 = document.querySelector('#d2') var d3 = document.querySelector('#d3') //2. イベントのバインド d1.onclick = function(){ コンソールログ(このID) } d2.onclick = 関数(){ コンソールログ(このID) } d3.onclick = 関数(){ コンソールログ(このID) } (2)運用実績:赤い部分をクリックしてください: 紫色の領域をクリックします。 緑色の領域をクリックします: 以上、イベント盛り上がってます! 2. イベントキャプチャ構造的に(視覚的にではなく)ネストされた要素には、イベント キャプチャの機能があります。つまり、親要素から子要素(イベント ソース要素)に同じイベントがキャプチャされます。 (トップダウン) (つまり、イベントはキャプチャされません) 上記の例では、バブリング方式を使用する場合、トリガー順序は d1——>d2——>d3 となるはずなので、確認してみましょう。 (1)3つのdiv要素にイベントをバインドする//1. 要素を取得する var d1 = document.querySelector('#d1') var d2 = document.querySelector('#d2') var d3 = document.querySelector('#d3') //2. イベントのバインド d1.onclick = function(){ コンソールログ(このID) } d2.onclick = 関数(){ コンソールログ(このID) } d3.onclick = 関数(){ コンソールログ(このID) } (2)運用実績:赤い部分をクリックしてください: 紫色の領域をクリックします。 緑色の領域をクリックします: イベント攻略ゲット!!! 知らせ:
2. イベントのバブルを防ぐ(1) W3C標準のevent.stopPropagation(); ですが、IE9以下ではサポートされていません。//1. 要素を取得する var d1 = document.querySelector('#d1') var d2 = document.querySelector('#d2') var d3 = document.querySelector('#d3') //2. イベントのバインド d1.onclick = function(){ コンソールログ(このID) } d2.onclick = 関数(){ コンソールログ(このID) } d3.onclick = 関数(e){ e.stopPropagation(); コンソールログ(このID) } 緑色の領域をクリックすると、外部イベントが順番にトリガーされず、イベントのバブリングがブロックされることがわかります。 (2) IE固有: event.cancelBubble = true;//1. 要素を取得する var d1 = document.querySelector('#d1') var d2 = document.querySelector('#d2') var d3 = document.querySelector('#d3') //2. イベントのバインド d1.onclick = function(){ コンソールログ(このID) } d2.onclick = 関数(){ コンソールログ(このID) } d3.onclick = 関数(e){ e.cancelBubble = true; コンソールログ(このID) } 結果は(1)と同じである。 (3)マージキャンセル:falseを返すJavaScript では、 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: CSSレイアウトにおけるフローティング問題に対する4つの解決策の詳細な説明
>>: バックアップと削除のためにリアルタイムでステートメントを検出するMySQLトリガーの考え方の詳細な説明
Linux タスク管理 - バックグラウンド実行と終了fg、bg、ジョブ、&、ctrl + ...
ネットでいろいろ検索してみたところ、Linux システム向けではなく、現在の新しいバージョンと一致し...
目次開発の際には、機能を段階的に分析して実装することで、明確な考え方を保つことができます。 1. フ...
目次1 はじめに2 トリガーの紹介3 トリガーを作成する4 トリガーを表示5. トリガーの削除6 結...
はじめに<br />誰もが高速インターネット接続にアクセスできるわけではありません。たと...
1. 前提条件インポートには require.context メソッドを使用します。vite で作成...
HTML を記述する過程で、クラス属性に複数の値を定義することがよくありますが、定義した値が無効であ...
1. Dockerfileを書く(1)プロジェクト名を右クリックして新しいテキストファイルを作成し、...
目次1. 基本タイプ2. オブジェクトタイプ2.1 配列2.2 タプル2.3 オブジェクト3. 型推...
Web ページのアクセシビリティは、フロントエンドでのみ評価および実装できるもののようです。ユーザビ...
1. はじめにPresto は、ギガバイトからペタバイトに及ぶデータ ソースに対してインタラクティブ...
この記事では、ローカル マシンに Java 8 をインストールせずに、Java 8 を使用して簡単な...
このケースはCentOS 7システムに基づいていますDockerの使用経験がある人に適していますLi...
序文フロントエンドページを書くとき、小さなアイコンなどの画像を使うことが多いです。画像を使うとコード...
#mysql -uroot -pパスワードを入力してくださいmysql> show full...