関数を学習する際には、多くの関数イベントが発生します。この記事では、それらについて詳しく説明します。
イベントとは何ですか?
JavaScript と HTML 間の対話はイベントを通じて実現されます。イベントは、ドキュメントまたはブラウザ ウィンドウ内で発生する対話の特定の瞬間です。リスナー (またはハンドラー) を使用してイベントをスケジュールし、イベントの発生時に適切なコードが実行されるようにすることができます。従来のソフトウェア エンジニアリングではオブザーバー パターンとして知られるこのモデルは、ページの動作 (JavaScript) とページの外観 (HTML および CSS) の間の疎結合をサポートします。
イベント フロー
イベント フローは、ページからイベントを受け取る順序を記述します。次のコードを想定します:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <div id="div1"></div></body></html>
div をクリックします。このクリックは div 上で発生するだけでなく、その親コンテナー本体もクリックされます。では、誰が最初にクリックされたのか、またイベントはどのように広がったのでしょうか?イベント ストリームは、このような一連の受信イベントを記述します。
IE イベント フロー (イベント バブリング)
IE イベント フローはイベント バブリングとも呼ばれます。つまり、イベントは最初に最も特定的な要素 (ドキュメント内で最も深いネスト層を持つノード) によって受信され、次に次の要素に伝播します。特定性の低い要素をステップごとに説明します。
上記のコードを例にとると、div 要素をクリックすると、クリック イベントは次の順序で伝播されます:
1.<div> 2.<body> 3.<html> 4.document
つまり、最初にクリック イベントが div 要素で発生し、これがelement は要素をクリックしたものであり、クリック イベントは DOM ツリーを上に伝播し、ドキュメント オブジェクトに伝播するまでノードの各レベルで発生します。
最新のブラウザはすべてイベント バブリングをサポートしていますが、いくつかの違いがあります。 IE5.5 以前のバージョンのイベント バブルは、html 要素をスキップし、本文からドキュメントに直接進みます。 IE9、Firefox、Chrome、Safari では、イベントがウィンドウ オブジェクトまでバブルされます。 (古い IE ブラウザはイベント バブリングのみをサポートします)。
イベント キャプチャ
イベント キャプチャの考え方は、特定性の低いノードがより早くイベントを受信し、特定のノードが最後にイベントを受信するというものです。これは、上の例を再度取り上げると、div をクリックします。 、イベント キャプチャのイベント トリガー シーケンスは次のとおりです。
1.document 2.<html> 3.<body> 4.<div>
イベント キャプチャ プロセス中、ドキュメント オブジェクトは最初にクリック イベントを受け取り、次にイベントは、実際のターゲットに到達するまで DOM ツリーに沿って下方向に伝播されます。イベント。
IE9、Firefox、Chrome、Safari、Opera はすべてイベント キャプチャをサポートしています。 DOM2 レベルのイベント仕様では、イベントがドキュメント オブジェクトから伝播を開始する必要がありますが、これらのブラウザはウィンドウ オブジェクトからイベントのキャプチャを開始します。
DOM イベント フロー
DOM レベル 2 イベントによって指定されるイベント フローには、イベント キャプチャ ステージ、ターゲット ステージ、イベント バブリング ステージの 3 つのステージが含まれます。最初に行われるのはイベントのキャプチャであり、イベントを傍受する機会が提供されます。その後、実際のターゲットがイベントを受信します。最後のフェーズはバブリングフェーズで、イベントに応答できます。
DOM イベント ストリームでは、実際のターゲットはキャプチャ フェーズ中にイベントを受信しません。これは、キャプチャ フェーズ中、ドキュメントから HTML、本文までのイベントが停止されることを意味します。次のステージはターゲット ステージ内にあるため、イベントは div 上で発生し、イベント処理のバブリング ステージの一部とみなされます。次に、バブリングフェーズが発生し、イベントがドキュメントに戻されます。
しかし、実際には、IE9、Firefox、Chrome、Safari、Opera9.5 以降では、キャプチャ フェーズ中にイベント オブジェクトでイベントがトリガーされます。その結果、ターゲット オブジェクトのイベントを操作する機会が 2 つ存在します。 (IE8 以前のバージョンは DOM イベント ストリーミングをサポートしていません)。
イベントハンドラー
イベントとは、ユーザーまたはブラウザ自体によって実行されるアクションです。クリック、ロード、マウスオーバーなどはすべてイベント名です。イベントに応答する関数をイベントハンドラ(イベントリスナー)と呼びます。イベント ハンドラーの名前は「on」で始まるため、クリック イベントのイベント ハンドラーは onclick、load イベントのハンドラーは onload になります。イベントのハンドラーを指定するにはいくつかの方法があります。
HTML イベント ハンドラー
要素によってサポートされる各イベントは、対応するイベント ハンドラーと同じ名前の HTML 属性を使用して指定できます。この属性の値は、実行可能な JavaScript コードである必要があります。例:
<button id="myButton" onclick="alert('Clicked')">Click Me</button>//定义了一个按钮,点击时会显示一个警告框;
HTML でのイベント ハンドラーの定義には、実行する特定のアクションを含めることができます。または、ページ上の他の場所で定義されたスクリプトを呼び出すこともできます。例:
<button id="myButton" onclick="showMsg()">Click Me</button> //点击按钮就会调用showMsg()函数;<script> function showMsg() { alert('Hello world!') }</script>
HTML 経由イベント ハンドラーを指定すると、次の 2 つの欠点があります。1. ユーザーは HTML 要素がページに表示されるとすぐに対応するイベントをトリガーする可能性があるため、時間差の問題が発生します。ただし、この時点ではイベント ハンドラーに実行条件がない可能性があります。2. HTML とJavaScript コードは密接に関連しているため、イベント ハンドラーを変更したい場合は、HTML コードと JavaScript コードを変更する必要があります。
DOM レベル 0 イベント ハンドラー
JavaScript を通じてイベント ハンドラーを指定する従来の方法は、イベント ハンドラー プロパティに関数を割り当てることです。各要素には独自のイベント ハンドラー属性があり、通常はすべて小文字です (onclick など)。この属性の値を関数に設定することで、イベント ハンドラーを指定できます。例:
var btn = document.getElementById('myButton'); btn.onclick = function() { alert("Clicked") }
使用DOM0级方法指定的事件处理程序被认为是元素的方法。因此,这时候事件处理程序是在元素的作用域中运行;换句话说,程序中的this引用当前元素。
也可以通过DOM0级方法删除事件处理程序,示例:
btn.onclick = null; //删除事件处理程序; DOM2级事件处理程序
DOM2级事件定义了两个方法,用于处理指定和删除事件处理程序的操作:addEventListener()和removeEventListener()。所有DOM节点都包含这两个方法,并且它们都接受3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。最后的布尔值如果是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理程序。示例:
var btn = document.getElementById('myButton'); //为按钮添加了click事件和处理程序; btn.addEventListener('click',function() { alert(this.id) },false)
与DOM0级方法一样,这里添加的事件处理程序也是在其依附的元素的作用域中运行的。使用DOM2级方法添加事件处理程序可以添加多个事件处理程序,示例:
var btn = document.getElementById('myButton'); //为按钮添加了多个click事件和处理程序; btn.addEventListener('click',function() { alert(this.id); },false); var btn = document.getElementById('myButton'); ; btn.addEventListener('click',function() { alert('hello world!'); },false);
这里为按钮添加了2个事件处理程序。这两个事件处理程序会按照添加它们的顺序触发。
通过addEventListener()添加的事件处理程序只能用removeEventListener()来移除;移除时传入的参数与添加处理程序时使用的参数相同,意味着addEventListener()添加的匿名函数无法移除:
//该代码无法运行;btn.removeEventListener('click',function() { alert(this.id); },false); //该代码工作正常;//removeEventListener()和addEventListener()使用了相同函数;var btn = document.getElementById('myButton'); var function handler() { alert(this.id); } btn.addEventListener('click',handler,false); btn.removeEventListener('click',handler,false);
本篇对js事件进行了总结,更多相关内容请关注php中文网。
相关推荐:
以上が関数イベントの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
